20

我有一个父表,其中有十几个子表引用它。这些子表又具有引用它们的其他子表。等等。

我需要从主父表中删除一行,将其一直向下级联。

在所有地方删除/重新创建约束以使它们“在级联删除”不是一种选择

遍历所有这些并手动删除子行是一场噩梦。

还有其他选择吗?

4

2 回答 2

28

DELETE 语句没有使其级联的参数。

因此,您既可以使用户成为用户,也可以ON CASCADE DELETE按正确的顺序执行一系列单独的删除。

您可以编写一个“智能删除”过程来调查表结构并在此基础上生成一系列删除,但这可能比编写单独的删除更工作,更像是一场噩梦。而且你必须有这些限制才能工作,这实际上并不总是需要的。

于 2012-12-14T15:26:39.867 回答
-1

我在 oracle 中解决了这种问题,我故意将数据从一个分支合并到另一个分支 - 目标,然后删除源分支。

https://sites.google.com/site/keytreechanger/Home https://sites.google.com/site/keytreechanger/Home/screenshots

引用

鉴于此错误,例如:客户端 Pedrus Root(内部密钥表示 #R=111)与 Petrus Root (#R=222) 相同。将222下的数据移动到111,然后删除222分支。
KTC 以一种巧妙的方式从数据库的所有相关表中收集与此案例(以及接下来要解决的几个案例)相关的所有数据。
该算法仅在需要的地方搜索并使用所有可用的关键组件。
出于审计目的,所有数据的备份都在本地维护。本地存储库透明地发展以适应表/字段定义的变化。

高级用户可以直观地检查表/关系树,并且可以查看/打印/编辑任何表中的数据,并可以选择修改假定的操作(剪切、剪切和粘贴或完成)。
最后,KTC 生成数百行插入、更新和删除的纠正代码来解决这个特殊情况,以合适的顺序列出,以
delete from rootTable 结尾,其中#R=222。
然后,我将代码应用于在线用户。

在您的情况下,过滤器必须删除除删除行之外的所有行。

AFAIK 市场上没有等效的应用程序。

于 2013-10-20T16:46:19.380 回答