Mysql 在包含数据的表上添加外键约束

Mysql 在包含数据的表上添加外键约束,mysql,Mysql,我想知道是否可以在已经有数据的表上添加外键约束。我有一张桌子供应商和一张桌子配料 当我尝试添加约束时,如下所示: 我得到以下错误 MySQL said: Cannot add or update a child row: a foreign key constraint fails (`blackfisk_relations`.`#sql-223_37`, CONSTRAINT `ingredients_supplier_id_foreign` FOREIGN KEY (`supplier_i

我想知道是否可以在已经有数据的表上添加外键约束。我有一张桌子供应商和一张桌子配料

当我尝试添加约束时,如下所示:

我得到以下错误

MySQL said: Cannot add or update a child row: a foreign key constraint fails (`blackfisk_relations`.`#sql-223_37`, CONSTRAINT `ingredients_supplier_id_foreign` FOREIGN KEY (`supplier_id`) REFERENCES `suppliers` (`id`) ON DELETE CASCADE)

当然可以,只需确保引用表中存在外键的值,否则必须创建所有缺少的值或将其值更改为null


祝您好运

若您在创建外键的表中的每个主键上都有记录,那个么您可以尝试更改表


您的错误表明表中有一条记录,而该记录在其他表中不作为主键存在。这将阻止您更改表

如果要将约束添加到包含数据的表中,则数据必须满足约束(或者,如果数据不必满足约束,则添加约束有什么意义?)

您的选择:

  • 您可以删除对不存在的外键的引用
  • 您可以在外键表中添加键,以便引用确实存在

(有些DBMS允许添加指定了NOCHECK的约束,这意味着将添加约束,但不会应用于现有数据-只应用于新数据和对现有数据的更改。我不知道MySql是否允许这样做-SQL Server和Oracle允许。如果MySql允许,您可能需要编写脚本,而不是使用GUI选项。)

找到故障的最好方法可能是编写一个左连接查询?对吗?是的-如果你想找到缺少的,一个左外部连接,所以你保留了左表中的条目-你可以在WHERE子句中设置一个条件,使供应商为空-这将显示所有的,并且只显示缺少的条目。我很困惑。那么哪张桌子是对的?哈当你做一个左外连接时,它看起来是这样的:从表1中选择x左外连接表2在表1上。col1=table2。col1 table1是左的,table2是右的(我知道你可能在开玩笑,但既然右连接存在,我想应该澄清一下。)