[英]MySQL ERROR #1215 - cannot add foreign key constraint (relationship table cannot be created)
我搜索了太多内容,但是找不到任何解决方案或出现此错误的原因。
首先我有3张桌子。 我有一个studenttable,其中有1个主键(昵称)及其密码。 我创建了那个没有任何问题。
其次,我的课程表有两个主键,分别是主题和课程。
我想创建可注册课程,因为我想保留哪些课程。 因此,我想用3个主键创建关系表。 其中1个是学生的昵称,另2个是课程和主题。 我收到类似“#1215无法添加外键约束”的错误消息。
我首先使用mysql workbench 6.3。 我尝试使用WAMP解决该问题,但是我搜索不了太多,但是找不到任何解决方案。
学生桌
课程表
错误-登记表
在mysql工作台中,昵称和主题没有给出错误,但是当然不能是主键。 我无法选择。
SQL代码
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));
enrolledtable中的“ course”与其所引用的字段的数据类型不同。 您的外键是INT(11),但它引用的是VARCHAR(45)。
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) #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)
);
因此(尽管在您的数据库环境中可能没有意义)
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)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.