mysql删除和外键约束

use*_*196 3 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%';
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

从这两个表中删除的最佳解决方案是什么?

int*_*tgr 6

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

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

请参阅有关外键约束的文档.