2014-02-28 36 views
1

總是有錯誤:「無法添加外鍵約束」當我創建我最後一個表MySQL錯誤:無法添加外鍵約束?


系統:Mac OS X 10.9
DB:MySQL的5.6.14
DBM:續集專業


CREATE TABLE users (
uid INT AUTO_INCREMENT PRIMARY KEY, 
uname VARCHAR(20) NOT NULL, 
uemail VARCHAR(20) NOT NULL, 
ucity VARCHAR(20), 
upassw VARCHAR(20) NOT NULL 
); 

CREATE TABLE songs(
sid INT AUTO_INCREMENT PRIMARY KEY, 
sname VARCHAR(20) NOT NULL, 
srldate DATE NOT NULL 
); 



CREATE TABLE albums (
albid INT AUTO_INCREMENT PRIMARY KEY, 
albname VARCHAR(20) NOT NULL, 
albrldate DATE NOT NULL, 
albrltime TIME NOT NULL 
); 

CREATE TABLE artists (
aid INT AUTO_INCREMENT PRIMARY KEY, 
aname VARCHAR(20) NOT NULL 
); 

CREATE TABLE genres (
gid INT AUTO_INCREMENT PRIMARY KEY, 
gname VARCHAR(20) NOT NULL 
); 

CREATE TABLE playlists (
uid INT NOT NULL, 
sid INT NOT NULL, 
plname VARCHAR(20) NOT NULL, 
plmdate DATE NOT NULL, 
plmtime TIME NOT NULL, 
PRIMARY KEY(uid, sid, plname, plmdate, plmtime), 
FOREIGN KEY(uid) REFERENCES users(uid), 
FOREIGN KEY(sid) REFERENCES songs(sid) 
); 

CREATE TABLE u_like_a (
aid INT NOT NULL, 
uid INT NOT NULL, 
PRIMARY KEY(aid, uid), 
FOREIGN KEY(aid) REFERENCES artists(aid), 
FOREIGN KEY(uid) REFERENCES users(uid) 
); 

CREATE TABLE be_fan (
aid INT NOT NULL, 
uid INT NOT NULL, 
PRIMARY KEY(aid, uid), 
FOREIGN KEY(aid) REFERENCES artists(aid), 
FOREIGN KEY(uid) REFERENCES users(uid) 
); 

CREATE TABLE follow (
uid INT NOT NULL, 
to_uid INT NOT NULL, 
PRIMARY KEY(uid, to_uid), 
FOREIGN KEY(uid) REFERENCES users(uid), 
FOREIGN KEY(to_uid) REFERENCES users(uid) 
); 

CREATE TABLE u_like_g (
gid INT NOT NULL, 
uid INT NOT NULL, 
PRIMARY KEY(gid, uid), 
FOREIGN KEY(gid) REFERENCES genres(gid), 
FOREIGN KEY(uid) REFERENCES users(uid) 
); 

CREATE TABLE u_share_pl(
uid INT NOT NULL, 
from_uid INT NOT NULL, 
plname VARCHAR(20) NOT NULL, 
plmdate DATE NOT NULL, 
plmtime TIME NOT NULL, 
PRIMARY KEY(uid, from_uid, plname, plmdate, plmtime), 
FOREIGN KEY(uid) REFERENCES users(uid), 
FOREIGN KEY(from_uid) REFERENCES users(uid), 
FOREIGN KEY(plname) REFERENCES playlists(plname), 
FOREIGN KEY(plmdate) REFERENCES playlists(plmdate), 
FOREIGN KEY(plmtime) REFERENCES playlists(plmtime) 
); #####---> This is the last table. 

錯誤來自這裏。我真的不知道爲什麼。 我已檢查所有屬性的類型。屬性的類型和名稱沒有問題。 但MySQL的總是說「無法添加外鍵約束」

+0

哪個表引擎您使用的? MyISAM不支持外鍵。 – ioseph

+0

@ioseph:但MyISAM永遠不會拋出一個錯誤,它不支持外鍵或者它不能創建一個。 –

回答

2

這裏是你在上表forgien REFERENCES users(from_uid)引用錯誤。

FOREIGN KEY(from_uid) REFERENCES users(from_uid) 

from_uid不屬於users

這應該是

FOREIGN KEY(from_uid) REFERENCES users(uid) 

playLists table有四列的主鍵的組合,所以你應該提供所有這四個列作爲forieng鍵u_share_pl table

另一個組合鍵作爲參考應該像

FOREIGN KEY(from_uid,sid,plname,plmdate,plmtime) REFERENCES playlists(uid,sid,plname,plmdate,plmtime) 

一個約束你的最後一個表創建應該是:

CREATE TABLE u_share_pl(
uid INT NOT NULL, 
from_uid INT NOT NULL, 
sid INT NOT NULL, 
plname VARCHAR(20) NOT NULL, 
plmdate DATE NOT NULL, 
plmtime TIME NOT NULL, 
PRIMARY KEY(uid, from_uid, plname, plmdate, plmtime), 
FOREIGN KEY(uid) REFERENCES users(uid), 
FOREIGN KEY(from_uid,sid,plname,plmdate,plmtime) REFERENCES playlists(uid,sid,plname,plmdate,plmtime) 
); 
+0

非常感謝,但我使用「FOREIGN KEY(from_uid)REFERENCES users(hid)」,它也有同樣的錯誤「無法添加外鍵約束」 – zproject89

+0

也許是輸入錯誤,這是用戶(uid)。如果不是,請參閱其他foriegn鍵,如列名 –

+0

問題今天上午,我再次檢查了所有表的屬性。但我真的認爲沒有錯。但錯誤仍然存​​在。 – zproject89

相關問題