0

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

但是有时我想放松一下,主要的例子是在开发环境中我想创建生产数据集的修剪/清理副本。所以我希望能够做类似的事情:

DELETE FROM x WHERE foo = 'bar'

并删除另一个表y中引用已删除行的行x。目前,在我的约束到位的情况下,这失败了:

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

有没有办法在 MySQL 中做到这一点而不改变表?我隐约记得DELETE CASCADE FROM x WHERE foo = 'bar'Oracle 或 Postgres 之类的东西,但我不确定如何在 MySQL 中执行此操作。

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

4

1 回答 1

0

尝试这个,

DELETE x, y
FROM  x 
      INNER JOIN y ON x.foo = y.foo
WHERE x.foo = 'bar'
于 2013-01-13T16:00:54.913 回答