mysql - 级联删除,如 ON DELETE CASCADE 用于 MySQL 中的一次性操作

标签 mysql sql foreign-keys

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

我在幻想诸如 DELETE FROM `table_a` WHERE `id` = 1 ON DELETE CASCADE; 但我似乎无法在文档 @ http://dev.mysql.com/doc/refman/5.5/en/delete.html 中找到任何与此相关的内容

  • 我不想ALTER 表来更改一次性操作的约束,然后使用另一个ALTER
  • 恢复它
  • 我不想为每个包含到 table_a 的外键的表执行类似 DELETE FROM `table_b` WHERE `a_id` = 1; 的操作

将 MySQL 5.5 与 InnoDB 结合使用

最佳答案

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

您可以写下 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 ;

关于mysql - 级联删除,如 ON DELETE CASCADE 用于 MySQL 中的一次性操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19641548/

相关文章:

php - 表单 POST 数据循环如何分配变量并与数据库进行比较

php - mysql_query where 语句

sql - 选择中的组编号 (Oracle)

sql - 从两个表到单个 View 的 T-SQL 层次结构

php - 如何在 Laravel 中制作简单的动态下拉列表?

mysql - Table with FK 指的是一张表有两个PK

MySQL ODBC 驱动程序 - 有没有办法阻止对 MySQL 连接器 ODBC 驱动程序的访问?

mysql - 具有 AND 匹配功能的多列 IN SELECT

java - 启动时的 JPA 自定义脚本

asp.net-mvc-4 - MVC4 Razor 下拉列表与外键绑定(bind)