MySQL ERROR#1215 - 无法添加外键约束(无法创建关系表)

时间:2017-11-12 10:57:35

标签: mysql sql database wamp mysql-workbench

我搜索的太多,但我找不到任何解决方案或原因导致此错误。

首先我有3张桌子。我有一个学生表,有1个主键(昵称)和他们的密码。我没有任何问题地创建了那个。

其次,我有coursetable有2个主键,这些是主题和课程。

我想创建一个注册表,因为我想保留哪些学生参加哪些课程。所以,我想用3个主键创建关系表。其中1个是学生的昵称,其中2个是课程和科目。我收到一条错误消息,如"#1215无法添加外键约束"。

我首先使用了mysql workbench 6.3。我尝试用WAMP解决这个问题,但是我无法搜索太多但我找不到任何解决方案。

学生表

enter image description here

课程表

enter image description here

错误 - 注册表

enter image description here

在mysql workbench中,昵称和主题不会出错,但是,当然不能是主键。我无法选择。

enter image description here

enter image description here

SQL CODE

CREATE TABLE studenttable(
nickname VARCHAR(45),
pass VARCHAR(45),
PRIMARY KEY (nickname)
);

CREATE TABLE coursetable(
subject VARCHAR(45),
course VARCHAR(45),
cname VARCHAR(45),
credit INT,
PRIMARY KEY (subject, course)
);

CREATE TABLE enrolledtable (
nickname VARCHAR(45),
subject VARCHAR(45),
course VARCHAR(45),
PRIMARY KEY (nickname, subject, course),
FOREIGN KEY (nickname) REFERENCES studenttable (nickname),
FOREIGN KEY (subject) REFERENCES coursetable (subject),
FOREIGN KEY (course) REFERENCES coursetable (course));

2 个答案:

答案 0 :(得分:0)

enrolledtable中的

“course”与它引用的字段的数据类型不同。 您的外键是INT(11),但它引用了VARCHAR(45)。

答案 1 :(得分:0)

Mysql对外键的要求非常清楚,其中 MySQL需要外键和引用键上的索引,以便外键检查可以快速而不需要表扫描。在引用表中,必须有一个索引,其中外键列列为相同顺序的第一列。 所以这没关系

drop table if exists enrolledtable;
drop table if exists coursetable;
drop table if exists studenttable;

CREATE TABLE studenttable(
nickname VARCHAR(45),
pass VARCHAR(45),
PRIMARY KEY (nickname)
);

CREATE TABLE coursetable(
subject VARCHAR(45),
course VARCHAR(45),
cname VARCHAR(45),
credit INT,
PRIMARY KEY (subject, course),
key k1 (course,cname,credit)                        #added
);

CREATE TABLE enrolledtable (
nickname VARCHAR(45),
subject VARCHAR(45),
course VARCHAR(45),
PRIMARY KEY (nickname, subject, course),
FOREIGN KEY (nickname) REFERENCES studenttable (nickname),
FOREIGN KEY (subject) REFERENCES coursetable (subject),
FOREIGN KEY (course) REFERENCES coursetable (course)
);

所以它(虽然它可能在您的数据库的上下文中没有意义)

1,2,3  
4,5,6