为了保持参照完整性,我在几个表上设置了外键约束,没有 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
中悬空的引用;我希望他们被删除。
答案 0 :(得分:0)
试试这个,
DELETE x, y
FROM x
INNER JOIN y ON x.foo = y.foo
WHERE x.foo = 'bar'