【问题标题】:MySQL error: Cannot add foreign key constraint?MySQL 错误:无法添加外键约束?
【发布时间】:2014-02-28 06:19:40
【问题描述】:

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


系统:Mac OS X 10.9
数据库: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总是说“不能添加外键约束”

【问题讨论】:

  • 您使用的是哪个表引擎? MyISAM 不支持外键。
  • @ioseph:但 MyISAM 永远不会抛出不支持外键或无法创建外键的错误。

标签: mysql sql foreign-keys constraints mysql-error-1064


【解决方案1】:

这是你在最后一张表中引用了错误的 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 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)
);

【讨论】:

  • 非常感谢,但我用的是“FOREIGN KEY(from_uid) REFERENCES users(hid)”,同样报错“Cannot add foreign key constraint”
  • 可能是输入错误,这是用户(uid)。如果没有,请查看其他外键,例如列名问题
  • 今天早上,我再次检查了所有表的属性。但我真的认为没有错。但错误仍然存​​在。
  • 我使用“DBM:Sequel Pro”。问题是否可能来自 DBM?
  • 一分钟前,我删除了数据库,并在终端下使用这些SQL命令创建表。但错误是一样的。看起来我的 SQL 命令确实有问题,但我真的找不到。我已经尽力解决这个问题大约 5 个小时。我真的很沮丧。
猜你喜欢
  • 1970-01-01
  • 2013-06-02
  • 2018-04-28
相关资源
最近更新 更多