使用内部联接删除MySQL但外键约束失败

时间:2017-08-04 20:35:50

标签: mysql sql

我有一个MySQL数据库。我想删除places.match_no > 26matches.chart_id = 106的所有匹配项。

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...

怎么办?

3 个答案:

答案 0 :(得分:3)

  

怎么办?

首先删除子表依赖行,然后删除父表行。您应该实际做的是定义CASCADE选项,同时定义FOREIGN KEYON DELETE CASCADE

另一种选择是拥有BEFORE DELETE触发器,并且DELETE子表行

答案 1 :(得分:1)

数据库中还有另一个表,它有一个kk_matches表的外键。在删除kk_matches表中的记录之前,需要删除kk_matches中指向该记录的其他表中的任何记录。其他你会成为"孤儿"那些其他记录。

外键作为避免这类操作的一种手段,会导致您的数据变得无关紧要。

答案 2 :(得分:1)

您无法删除具有外键约束引用的字段的行。您必须先删除引用行,然后删除所需的行(或删除约束,如果不是这样)。

查看本教程以获取更多信息:

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