2015-06-27 88 views
1

嘗試運行以下安裝腳本時出現150錯誤。 什麼錯了?errno:150「外鍵約束不正確」

serverPermissions似乎會觸發錯誤,但我不完全確定爲什麼。 我認爲外鍵約束都可以正確映射,據我所知。我可能錯過了一些明顯的東西。

-- Setup my members database 
DROP DATABASE IF EXISTS mymembers; 
CREATE DATABASE IF NOT EXISTS mymembers; 

/* 
* The list of all members in the community 
*/ 
DROP TABLE IF EXISTS members; 
CREATE TABLE members 
(
id INT NOT NULL AUTO_INCREMENT, 
name VARCHAR(30), 
steamID3 INT NOT NULL UNIQUE, 
PRIMARY KEY (id) 
); 

/* 
* Lists all servers in operation 
*/ 
DROP TABLE IF EXISTS servers; 
CREATE TABLE servers 
(
sid INT NOT NULL AUTO_INCREMENT, 
sname VARCHAR(30), -- name of server (short name) 
PRIMARY KEY(sid) 
); 

/* 
* Maps a member and a server together along with a flag. 
* Record (0, 12, 1, 0) indicates member 12 has flag 0 on server 1. 
*/ 
DROP TABLE IF EXISTS serverPermissions; 
CREATE TABLE serverPermissions 
(
mid INT, 
sid INT, 
flagid INT, 
PRIMARY KEY(mid, sid, flagid), 
FOREIGN KEY (mid) REFERENCES members(id), 
FOREIGN KEY (sid) REFERENCES servers(sid), 
FOREIGN KEY (flagid) REFERENCES flags(id) 
); 

/* 
* flags are used to give custom permissions to players. 
* For example a record may be: (0, "VIP", "This play is very important") 
*/ 
DROP TABLE IF EXISTS flags; 
CREATE TABLE flags 
(
id INT NOT NULL AUTO_INCREMENT, 
name VARCHAR(10), 
description VARCHAR(100), 
PRIMARY KEY(id) 
); 

回答

3

更改表格創建順序。在創建serverPermissions之前,您應該創建flags表。請參閱Demo Here

+0

噢,我多麼尷尬。我在凌晨3點製作數據庫,這是我的藉口。謝謝! – Mohammad

2

在添加外鍵約束時,兩個表的存儲類型都應該爲InnoDb。將這兩個表的類型從MyISAM更改爲InnoDB

0

此鏈接(https://mariadb.org/mariadb-innodb-foreign-key-constraint-errors/)給出了支持外鍵的引擎類型的快照。

據我所知,以下存儲引擎MariaDB的和/或MySQL的支持外鍵:

InnoDB (both innodb_plugin and XtraDB) 
PBXT (https://mariadb.com/kb/en/mariadb/about-pbxt/) 
SolidDB for MySQL (http://sourceforge.net/projects/soliddb/) 
ScaleDB (https://mariadb.com/kb/en/mariadb/scaledb/ and http://scaledb.com/pdfs/TechnicalOverview.pdf) 
MySQL Cluster NDB 7.3 or later (https://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-ndb-innodb-engines.html)