2013-01-13 80 views
0

为了保持参照完整性,我在几个表上设置了外键约束,没有ON CASCADE DELETE在MySQL控制台中级联删除

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

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

试试这个,

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

这是在简单的情况很好,但有时也有多个层次(X - >Ÿ - > Z,等等)。理想情况下,我想自动级联删除,而无需手动指定联接。 –