簡體   English   中英

添加外鍵時,外鍵約束失敗

[英]A foreign key constraint fails when adding a foreign key

我有兩個預先存在的表, bar (具有2列, id [int 11]和name )和foo_bar (具有3列, idfoo_idbar_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 )參考barid )刪除bar_id

bar表上的bar_idid都具有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM