【问题标题】:What is the most efficient way to delete hierarchies in mysql在mysql中删除层次结构的最有效方法是什么
【发布时间】:2017-02-09 10:38:14
【问题描述】:

我正在使用邻接列表的修改版本来存储分层数据。因此,创建了这种树。

在 mysql 模式中也是这样表示的:

删除 C 之间的节点以使孩子 F, G 现在是 A 的孩子的最佳方法是什么?

【问题讨论】:

  • 模型是你设计的吗?我认为这不是存储分层数据的最佳方式,尤其是在您必须处理添加/删除时。如果您只是有 1:n 关系,也许可以看看 nested set model(参见 this document 示例)。

标签: mysql sql-delete hierarchical-data


【解决方案1】:

在应用程序级别,您需要列出要删除的节点的子节点,并将这些子节点的级别列分配给父节点。 否则,您可以在从表中删除节点时创建一个触发器,该触发器将执行上述任务。 如果您正确地构建表格,您的所有任务都会容易得多。 表应该只是保存直接父级的父子关系。

 Id Name   ParentId
 1   A      NULL
 2   B      1
 3   D      2

级别可以由编号确定。递归完成的次数。
您现在甚至可以通过添加父列并编写一个脚本来添加该列中可用的最后一个级别。
所以在这种情况下,删除将很简单
1. 获取孩子列表 - 其中 parentid=nodeid。
2. 用 nodeids 的 parentid 更新它们的父列。
而不是更新和计算所有 3 级列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多