是否有某种神奇的 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/