mysql - 添加外键约束失败。缺少约束错误代码的索引:1822
问题描述
所以我试图创建一个表'Prerequisite_to',它基本上是一个关系,它显示了哪些类被视为特定类的先决条件。这是我的 SQL 表缺陷:
CREATE TABLE Class(
infs CHAR(4) NOT NULL,
course_number CHAR(3) NOT NULL,
PRIMARY KEY (infs,course_number));
CREATE TABLE Prerequisite_to(
infs CHAR(4),
course_number CHAR(3),
PRIMARY KEY (infs,course_number),
FOREIGN KEY (infs) REFERENCES Class(infs),
FOREIGN KEY (course_number) REFERENCES Class(course_number)
)
但是,当我执行脚本时,出现此错误:
17:29:43 创建表 Prerequisite_to( infs CHAR(4), course_number CHAR(3), PRIMARY KEY (infs,course_number), FOREIGN KEY (infs) REFERENCES Class(infs), FOREIGN KEY (course_number) REFERENCES Class(course_number) ) 错误代码:1822。添加外键约束失败。引用表 'Class' 中的约束 'prerequisite_to_ibfk_2' 缺少索引 0.00038 秒
解决方案
你有一个复合主键,所以你需要一个复合外键:
CREATE TABLE Prerequisite_to(
infs CHAR(4),
course_number CHAR(3),
PRIMARY KEY (infs,course_number),
FOREIGN KEY (infs, course_number) REFERENCES Class(infs, course_number)
);
仅作记录,我不喜欢复合主键。我也认为先决条件需要两个课程参考。所以:
CREATE TABLE Classes (
class_id int auto_increment primary key,
infs CHAR(4) NOT NULL,
course_number CHAR(3) NOT NULL,
unique (infs, course_number)
);
CREATE TABLE Prerequisites (
preresequisite_id int auto_increment primary key,
class_id int,
prerequisite_class_id int,
FOREIGN KEY (class_id) REFERENCES Classes(class_id),
FOREIGN KEY (prerequisite_class_id) REFERENCES Classes(class_id)
);
推荐阅读
- javascript - React 条件渲染和导航栏
- python - 打开未知文件的错误
- javascript - 使用值数组过滤对象数组?
- jquery - 访问嵌套在 3 个 div 下的目标属性
- r - 如何使用 R 根据其他列的值创建新列
- python - 用于选择当前行上方所有文本的 Spyder Python 快捷方式
- wordpress - 循环更新页数
- c++ - 为什么 Clang std::ostream 会写入 std::istream 无法读取的双精度值?
- mongodb-query - 如何在 Java 中使用 $month 作为 MongoDB 中逻辑运算符的一部分?
- markdown - 从非 Jekyll 博客迁移到 Jekyll 时出现文本格式问题