[英]A foreign key constraint fails when adding a foreign key
我有兩個預先存在的表, bar
(具有2列, id
[int 11]和name
)和foo_bar
(具有3列, id
, foo_id
和bar_id
[int 11])。 (還有一個表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
,CONSTRAINT#sql-1_10ad_ibfk_1
FOREIGN KEY(bar_id
)參考bar
(id
)刪除bar_id
bar
表上的bar_id
和id
都具有int(11)
的類型。 bar
表上的id
是主鍵。
我的猜測是,有一個外鍵bar_id
引用了bar
表中不存在的id
。 您可以使用以下查詢找到它:
SELECT *
FROM foo_bar fb
LEFT JOIN bar b
on fb.bar_id = b.id
WHERE b.id IS NULL;
要解決此問題,您可以從foo_bar
刪除這些有問題的記錄,也可以更新它們以指向bar
中實際存在的父行。
我認為問題在於,已經存在違反約束的行。 您可以通過運行以下命令查看情況:
select fb.*
from foo_bar fb
where not exists (select 1 from bar b where b.id = fb.id);
如果是這種情況,請刪除有問題的行,然后嘗試再次添加約束。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.