我搜索的太多,但我找不到任何解决方案或原因导致此错误。
首先我有3张桌子。我有一个学生表,有1个主键(昵称)和他们的密码。我没有任何问题地创建了那个。
其次,我有coursetable有2个主键,这些是主题和课程。
我想创建一个注册表,因为我想保留哪些学生参加哪些课程。所以,我想用3个主键创建关系表。其中1个是学生的昵称,其中2个是课程和科目。我收到一条错误消息,如"#1215无法添加外键约束"。
我首先使用了mysql workbench 6.3。我尝试用WAMP解决这个问题,但是我无法搜索太多但我找不到任何解决方案。
学生表
课程表
错误 - 注册表
在mysql workbench中,昵称和主题不会出错,但是,当然不能是主键。我无法选择。
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));
答案 0 :(得分:0)
“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