7

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

我正在幻想诸如此类的东西,但我似乎在文档@ http://dev.mysql.com/doc/refman/5.5/en/delete.htmlDELETE FROM `table_a` WHERE `id` = 1 ON DELETE CASCADE;中找不到任何与此有关的内容

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

将 MySQL 5.5 与 InnoDB 一起使用

4

1 回答 1

11

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

您可以写下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 ;
于 2013-10-28T17:49:12.003 回答