MySQL控制台中的级联删除

时间:2013-01-13 15:56:52

标签: mysql sql

为了保持参照完整性,我在几个表上设置了外键约束,没有 ON CASCADE DELETE

然而,有时我想放松一点,最好的例子是在开发环境中我想创建一个生产数据集的修剪/消毒副本。所以我希望能够做到这样的事情:

DELETE FROM x WHERE foo = 'bar'

并且在y中引用已删除行的另一个表x中的行也会被删除。目前我的约束已经失败了:

Cannot delete or update a parent row: a foreign key constraint fails

有没有办法在不改变表的情况下在MySQL中执行此操作?我依稀记得来自Oracle或Postgres的DELETE CASCADE FROM x WHERE foo = 'bar'之类的东西,但我不确定如何在MySQL中这样做。

我知道FOREIGN_KEY_CHECKS = 0,但这只会留下y中悬空的引用;我希望他们被删除。

1 个答案:

答案 0 :(得分:0)

试试这个,

DELETE x, y
FROM  x 
      INNER JOIN y ON x.foo = y.foo
WHERE x.foo = 'bar'