mysql - 尝试创建外键时 MySQL 出现错误 1822

标签 mysql sql mysql-workbench

我在创建外键时遇到错误。错误为 1822,内容如下:

Error Code: 1822. Failed to add the foreign key constraint. Missing index for constraint 'Changes_ibfk_4' in the referenced table 'Recipe'

我读过类似的问题,问题似乎是,我们需要在其上创建外键的列与引用的列没有相同的数据类型。

但是,我不知道这两列有何不同。两者都是主键,具有相同的名称和类型 varchar(255)。下面是MySQL代码。

两个“版本”列之间有区别吗?或者问题是其他的?

alter table Recipe drop column version;
alter table Changes drop column version;
alter table Recipe add column version varchar(255);
alter table Changes add column version varchar(255);
alter table Recipe drop primary key, add primary key(recipeID, version);
alter table Changes drop primary key, add primary key(newRecipeID, version);
alter table Changes add foreign key(version) references Recipe(version);

最佳答案

在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列 dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys。在您的示例中的 html 中,您在更改表的配方中没有这样的键更改添加外键(版本)引用配方(版本

关于mysql - 尝试创建外键时 MySQL 出现错误 1822,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56078681/

相关文章:

MySQL 查询 : count entries by status

mysql - mysql 的多个大小写值

mysql - 使用 MySQL Workbench 简单连接到 Amazon RDS MySQL 数据库

mysql - 工作台编辑器警告虚假错误

生产数据库上的 MySql ALTER TABLE - 有什么问题吗?

php - 循环中的mysql查询使用左连接与同名列

sql - 更新列以删除 SQLite 中之前的所有内容并包括空格

MySQL 错误 1064 - MySQL Workbench

mysql - Maatwebsite import csv 超出最大执行时间 60 秒错误

sql - 将 SQL 列结果翻译成文本