【发布时间】:2021-11-12 19:51:35
【问题描述】:
我正在编写这些数据库表,但出现此错误:
错误代码:3734。添加外键约束失败。失踪 引用中约束“grade_ibfk_3”的“学期”列 表“注册”0.0012 秒
我不知道为什么。我查看了类似的问题,但仍然找不到我的问题的解决方案。我要创建的是成绩表。提前感谢您的帮助。
CREATE TABLE Student
(
stud_id int unsigned not null,
stud_name varchar(30) not null,
stud_phone varchar(10) not null,
stud_date_of_birth varchar(10) not null,
stud_city varchar(50) not null,
stud_adress varchar(100) not null,
stud_postcode char(4) not null,
PRIMARY KEY(stud_id)
);
CREATE TABLE Subject
(
subj_code char(8) not null,
subj_title varchar(50) not null,
PRIMARY KEY (subj_code)
);
CREATE TABLE Enrolement
(
stud_id int unsigned not null,
subj_code char(8) not null,
semester smallint unsigned not null DEFAULT 1,
year smallint unsigned not null,
commnet varchar(500) null,
PRIMARY KEY (stud_id, subj_code ,semester, year),
FOREIGN KEY(stud_id) REFERENCES Student(stud_id),
FOREIGN KEY(subj_code) REFERENCES Subject(subj_code)
);
CREATE TABLE Grade
(
stud_id int unsigned not null,
subj_code char(8) not null unique,
semester smallint unsigned not null DEFAULT 1,
year smallint unsigned not null,
grade char(2) null,
PRIMARY KEY(stud_id, subj_code, semester, year),
FOREIGN KEY(stud_id) REFERENCES Student(stud_id),
FOREIGN KEY(subj_code) REFERENCES Subject(subj_code),
FOREIGN KEY (semester) REFERENCES Enrolement (semester),
FOREIGN KEY (year) REFERENCES Enrolement (year)
);
【问题讨论】:
-
引用的列缺少索引。在注册中,添加
index (semester)。注意:还有其他类似的问题。