【发布时间】:2014-05-30 04:02:38
【问题描述】:
在 MySQL 中是否可以根据父表递归删除所有子表?
假设我有
+-------+
|TBL1.id|
+-------+
+-------+--------------------------+
|TBL2.id|TBL2.parentId (FK TBL1.id)|
+-------+--------------------------+
+-------+--------------------------+
|TBL3.id|TBL3.parentId (FK TBL2.id)|
+-------+--------------------------+
现在,我不能从 TBL1 中删除所有行,因为 TBL2 引用了 TBL1.id,我不能删除 TBL2,因为 TLB3 引用了 TBL2。
是否可以使用 MySQL 生成一个 SQL 查询来列出必须删除的表的顺序?还是列出表的依赖关系,从最远的孩子开始?
我不想删除表,只是删除一组表的所有行及其子项,以及它们的子项,...
目前我有几个脚本,每个父表一个用于删除所有子表,但我想自动执行。
编辑 1: 数据库处于开发模式,因此仍在向其中添加新表和约束。
我不拥有没有级联删除的数据库。我可以将级联删除添加到发送给我的副本中,但这与使用我今天拥有的脚本一样多。
【问题讨论】:
-
您是否尝试修改 FK 定义以使用
ON DELETE CASCADE?还是我理解错了,不能满足你的需要? -
在帖子中添加了更多详细信息。不幸的是,级联删除不是一种选择。
-
您要
delete行还是drop表? -
我想删除行。
标签: mysql