mysql删除和外键约束

时间:2010-05-05 00:41:59

标签: mysql sql-delete

我正在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 个答案:

答案 0 :(得分:6)

更改此约束以使用ON DELETE CASCADE - 这意味着如果删除某行,则也会自动删除任何“子”行。

当然要好好使用CASCADE - 只在必要时才使用它。如果你对它过于热心,并且不小心做了一个位置很好的DELETE,它最终可能会删除你数据库的一半。 :)

请参阅documentation on foreign key constraints

答案 1 :(得分:0)

我想我知道你要做什么

如果你不能改变表结构,那么你可以使用2个语句,第一个用子选择

从B中删除出价IN(从A中选择出价,其中名称为'%xxxx%');

从A中删除名称如'%xxxx%';