为了保持参照完整性,我在几个表上设置了外键约束,没有 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
; 我希望他们被删除。