MySQL删除和外键约束

3

我正在从MYSQL的两个表中删除所选行,这两个表具有外键。

DELETE d,b
  FROM A as b
  INNER JOIN B as d on b.bid=d.bid WHERE b.name LIKE '%xxxx%';

尽管我试图从两个表中删除数据,MYSQL仍然抱怨外键问题:

Error: Cannot delete or update a parent row: a foreign key constraint
fails (`yyy/d`, CONSTRAINT `fk_d_bid` FOREIGN KEY (`bid`) REFERENCES 
`b` (`bid`) ON DELETE NO ACTION ON UPDATE NO ACTION)

这里最好的解决方案是从两个表中删除吗?
2个回答

6
将此约束更改为使用ON DELETE CASCADE--这意味着如果删除一行,则任何“子”行也将自动删除。
当然,要小心使用CASCADE--只有在必要时才使用它。如果你过于热衷于它,并且不小心进行了一个恰到好处的DELETE,那么它可能会删除你数据库的一半。 :)
请参见外键约束的文档

0

我想我明白你想做什么

如果您无法更改表结构,则可以使用两个语句,第一个语句带有子查询

从B中删除bid IN(从A中选择bid,其中名称类似于“%xxxx%”);

从A中删除名称类似于“%xxxx%”的记录;


很好的想法,但是我遇到了“无法在FROM子句中更新目标表'B'”的问题。 - user121196

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接