2017-08-04 71 views
0

我有一個MySQL數據庫。我想刪除places.match_no > 26matches.chart_id = 106的所有比賽。MySQL刪除內連接,但外鍵約束失敗

DELETE matches 
FROM kk_matches AS matches 
INNER JOIN places ON places.id = matches.place_id 
    AND places.match_no > 26 
WHERE matches.chart_id = 106 

這將導致一個錯誤:

#1451 - Cannot delete or update a parent row: a foreign key constraint fails...

怎麼辦?

回答

1

數據庫中有另一個表,它有一個kk_matches表的外鍵。在可以刪除kk_matches表中的記錄之前,您需要刪除其他表中指向kk_matches中該記錄的其他表中的任何記錄。另外,你會「孤立」其他記錄。

存在外鍵作爲避免這些操作的手段,這些操作會導致數據變得無關緊要。

1

您不能刪除具有由外鍵約束引用的字段的行。您必須先刪除引用行,然後刪除所需的行(或者刪除約束,如果不是有意的)。

檢查本教程的詳細信息:

https://www.w3schools.com/sql/sql_foreignkey.asp

3

What to do?

先刪除子表相關的行,然後去刪除父錶行。你應該實際做的是定義CASCADE選項,同時定義你的FOREIGN KEYON DELETE CASCADE

另一種選擇是有一個BEFORE DELETE觸發,並在那裏做DELETE子錶行

+0

子表已'ON DELETE NO ACTION',這就是我想要使用。 – xms