2014-02-28 3 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. 

ERROR


프로 속편은 여기에서 비롯됩니다. 나는 정말로 이유가 없다. 모든 속성의 유형을 확인했습니다. 속성의 유형과 이름은 아무런 문제가 없습니다. 그러나 MySQL은 항상

+0

사용중인 테이블 엔진? MyISAM은 외래 키를 지원하지 않습니다. – ioseph

+0

@ioseph : 그러나 MyISAM은 외부 키를 지원하지 않거나 만들 수 없다는 오류를 던지지 않습니다. –

답변

2
여기

마지막 테이블에 REFERENCES users(from_uid) forgien 잘못된 참조입니다 "외래 키 제약 조건을 추가 할 수 없습니다"라고합니다.

FOREIGN KEY(from_uid) REFERENCES users(from_uid) 

from_uid

이이어야 users

에 속하지

FOREIGN KEY(from_uid) REFERENCES users(uid) 

당신의 playLists table 당신이 u_share_pl table에 forieng 키와 모든 네 개의 열을 공급해야하므로, 네 개의 열 기본 키 조합을 가지고있다.

참고로 또 다른 복합 키는 귀하의 마지막 테이블 만들기

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

관련 문제