mysql - 添加外键约束失败。缺少约束索引错误代码 : 1822

标签 mysql sql mysql-workbench

因此,我尝试创建一个表“Precession_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 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) ) Error Code: 1822. Failed to add the foreign key constraint. Missing index for constraint 'prerequisite_to_ibfk_2' in the referenced table 'Class' 0.00038 sec

最佳答案

您有一个复合主键,因此您需要一个复合外键:

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)
);

郑重声明一下,我不喜欢复合主键。我还认为先决条件需要个类(class)引用资料。所以:

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)
);

关于mysql - 添加外键约束失败。缺少约束索引错误代码 : 1822,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52470537/

相关文章:

php - 如何在laravel中为每个用户生成唯一的自动增量值并将其添加到数据库

python - 为什么在一台 Mac 上编译的 _mysql.co 在另一台 Mac 上无法运行?

sql - 查找期间(月)范围内涵盖的年份百分比?

c# - SQL 用户定义的聚合值保留顺序?

mysql - 只接受少数特定值的最佳数据类型是什么?

java - 在mysql中写入波斯语或阿拉伯语字母

PHP/MySQL > 6.99 x 100 = 600?

MySQL Workbench,删除外键

mysql - 安装 MySQL 并检查 root 密码失败?

MySQL Workbench 遇到了 p‌r‌o‌b‌l‌e‌m。 MySQL 无法启动 Windows 7