添加外键时外键约束失败

e7arh2l6  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(499)

我有两张已经存在的table, bar (有2列, id [int 11]和 name )以及 foo_bar (3列, id , foo_id 以及 bar_id [内景11])(还有一张table foo 但这与此无关。)
我想将迁移添加到 foo_bar 所以当一行从 bar 它删除中的相关行 foo_bar . 这是我的声明:

ALTER TABLE `foo_bar` ADD FOREIGN KEY (`bar_id`) REFERENCES `bar`(`id`) ON DELETE CASCADE

但是当我运行这个时,我得到了一个错误:
1452-无法添加或更新子行:外键约束失败( dbn . #sql-1_10ad ,约束 #sql-1_10ad_ibfk_1 外键( bar_id )参考文献 bar ( id )删除时(级联)
两者 bar_id 以及 idbar 表的类型为 int(11) . idbar 表是主键。

imzjd6km

imzjd6km1#

我猜有外键 bar_id 指的是 idbar 不存在的表。您可以使用以下查询找到它:

SELECT *
FROM foo_bar fb
LEFT JOIN bar b
    on fb.bar_id = b.id
WHERE b.id IS NULL;

要解决此问题,可以从中删除这些有问题的记录 foo_bar 或者可以更新它们以指向中的父行 bar 实际上是存在的。

k2fxgqgv

k2fxgqgv2#

我认为问题是已经存在违反约束的行。您可以通过运行以下命令查看情况:

select fb.*
from foo_bar fb
where not exists (select 1 from bar b where b.id = fb.id);

如果是这种情况,则删除有问题的行,然后再次尝试添加约束。

相关问题