繁体   English   中英

MySQL错误:无法添加外键约束?

[英]MySQL error: Cannot add foreign key constraint?

创建我的最后一个表时,总会出现错误: “无法添加外键约束”


系统:Mac OS X 10.9
数据库:MySQL 5.6.14
DBM:续集Pro


 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总是说“不能添加外键约束”

这是您在上一张表中引用了错误的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具有四列的主键组合,因此您应该在u_share_pl table提供所有这四列作为前键。

另一个组合键作为参考应该是单个约束,例如

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

您的最后一个表Create应该是:

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)
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM