【发布时间】:2017-02-26 18:35:09
【问题描述】:
我是一个 sql 初学者。我正在创建一个数据库来跟踪学生的入学情况。
我使用以下方法创建了前 3 个学生、学校和班级表(数据库必须跟踪学生所在班级):
CREATE TABLE Students (
studId int NOT NULL AUTO_INCREMENT primary key,
name varchar(20),
surname varchar(20),
birthDate date,
birthPlace varchar(40)
);
CREATE TABLE Schools (
schId varchar(20) NOT NULL primary key,
name varchar(50),
province char(2),
region varchar(20)
);
CREATE TABLE Classes (
classId int NOT NULL AUTO_INCREMENT,
schId varchar(20),
FOREIGN KEY (schId) REFERENCES Schools(schId),
PRIMARY KEY (classId, schId),
name varchar(5),
course varchar(20),
option varchar(20)
);
现在,我需要一个 Enroll 表,但这会导致错误:
CREATE TABLE Enrolls(
studId int,
schId varchar(20),
classId varchar(20),
FOREIGN KEY (schId) REFERENCES Schools(schId),
FOREIGN KEY (studId) REFERENCES Students(studId),
FOREIGN KEY (classId) REFERENCES Classes(classId),
PRIMARY KEY(studId, schId, classId)
);
我想是因为 classId 是 Classes 表中带有 schId 的主键。
我该如何解决?
ERROR 1005 (HY000): Can't create table studentsdb.enrolls (errno: 150 "Foreign key constraint is wrongly forms")
【问题讨论】:
-
请发布错误信息。
-
ERROR 1005 (HY000): Can't create table
studentsdb.enrolls(errno: 150 "外键约束格式不正确") -
乍一看
schId varchar(20)也必须为NULL -
乍一看,
classId varchar(20)必须是int,就像在引用的表中一样。 -
第三眼选项是保留字