MySQL 错误 : Cannot add foreign key constraint?

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

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


系统: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 不属于用户

应该是

FOREIGN KEY(from_uid) REFERENCES users(uid)

您的 playLists 表 具有四列的主键组合,因此您应该在 u_share_pl 表 中提供所有这四列作为 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)
);

关于MySQL 错误 : Cannot add foreign key constraint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22087711/

相关文章:

mysql - 如何在MySQL中获取两个日期的月份差

python - AWS Lambda Python 与 MySQL

sql - 通过添加到它来修改表字段

mysql - 存在外键约束时更改主键值(特定记录的 ID)

mysql - SQLSTATE[23000] : Integrity constraint violation: 1452 Cannot add or update a child row on CONSTRAINT `fk_users_has_ratings_businesses1

PHP - 具有多个数据库的应用程序

php - 如何链接两台不同机器上的两个mysql数据库?

sql - 从具有排名契约(Contract)的日期创建历史表(差距和孤岛?)

sql - 过滤掉子查询中返回的行

mysql - 使用 mysql 将值插入带有外键的表中