级联删除类似ON DELETE CASCADE在MySQL中执行一次操作

use*_*130 4 mysql sql foreign-keys

是否有某种神奇的SQL语句删除行及其所有依赖项(由外键约束链接)而不更改表以ON DELETE CASCADE手动添加或删除每个相关行?

我正在幻想这样的东西,DELETE FROM `table_a` WHERE `id` = 1 ON DELETE CASCADE;但我似乎无法在doc @ http://dev.mysql.com/doc/refman/5.5/en/delete.html找到任何有效的东西.

  • 我不希望ALTER表只更改一次操作的约束,然后使用另一个操作将其还原ALTER
  • 我不想为DELETE FROM `table_b` WHERE `a_id` = 1;包含FK的每个表执行类似的操作table_a

使用MySQL 5.5和InnoDB

ype*_*eᵀᴹ 10

不,简单的答案是,不,没有捷径.

您可以写下DELETE语句来删除相关表中的所有相关行,或者您已经定义了外键约束ON DELETE CASCADE.

请注意 - 只要外键关系中没有循环路径 - 就可以使用DELETE从多个表中删除的单个语句:

DELETE a, b, c, d
FROM a
  LEFT JOIN b  ON  b.a_id = a.a_id
  LEFT JOIN c  ON  c.a_id = a.a_id
  LEFT JOIN d  ON  d.b_id = b.b_id 
WHERE
    a.a_id = 1 ;
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,正如 [here](/sf/answers/481739331/) 和 mysql [documentation](https://dev.mysql.com/doc/refman/5.5/en/delete .html),没有办法控制删除的顺序,所以这可能仍然失败。我刚刚学会了艰难的方式...... (3认同)