You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL创建Grade表无法添加外键报错错误码3734问题求助

错误原因

该报错是外键引用规则不符合MySQL要求导致的:
Enrolement表的主键为联合主键(stud_id, subj_code, semester, year),如果Grade表需要关联Enrolement表做外键约束,必须完整引用联合主键的所有字段,不能单独拆分semester、year这两个字段单独作为外键引用,且这两个字段在Enrolement表中没有独立的唯一索引,本身也不具备唯一标识性,不符合外键引用的基本要求。
另外你当前Grade表中给subj_code加了unique约束不符合业务逻辑:同一门课程在不同学期、不同年份会产生多条成绩记录,唯一约束会导致同课程只能存入一条成绩数据。

解决方案

将Grade表的外键调整为联合外键,直接关联Enrolement的完整联合主键即可,同时删除subj_code的多余唯一约束,调整后的建表语句如下:

CREATE TABLE Grade
(
stud_id int unsigned not null,
subj_code char(8) not null,
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, subj_code, semester, year) REFERENCES Enrolement(stud_id, subj_code, semester, year)
);

如果需要保留单独关联Student和Subject的外键也可以,但没有必要,因为Enrolement表本身已经约束了stud_id和subj_code的合法性,关联Enrolement的联合主键已经能保证Grade表的四个主键字段都符合前置数据要求。


内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:42:03