作家
登录

MySQL树状数据的数据库设计

作者: 来源: 2017-09-27 12:54:21 阅读 我要评论

 node_id=?)wt),?,',')) 

sql中的3个?均为要参加父节点的id。

   2. 更新(含子节点)

如不雅更新的时刻,父节点的地位没有变更,则不必推敲太多;

如不雅须要更新地点父节点,比拟于最简单的树节点设计模式,增长祖先路径的方法除了在更新当前节点本身的父id外,还须要修改对应的祖先路径,这个步调经由过程存储过程实现,是一种比较简单的方法,在此不赠予陈。仅对不应用存储过程的方法进行描述。

个中?_n表示要修改的节点的id,?_p表示要修改的节点的新父节点的id。

同样要重要先删除所有后代节点,再删除本节点;

注:应用该sql必定要先更新子节点的祖先路径,再更新本节点的祖先路径,如不雅是应用存储过程的话就可以疏忽这一点了。

   3. 删除(含子节点)

  1. UPDATE t_node SET p_id=?_p WHERE node_id=?_n; 
  2. UPDATE t_node SET ancestor_path=CONCAT((SELECT * FROM(SELECT ancestor_path FROM t_node WHERE node_id=?_p)wt2),?_p,',',SUBSTR(ancestor_path,LENGTH(@PPath)+1)) 
  3. WHERE ancestor_path LIKE CONCAT((SELECT * FROM (SELECT @ppath:=ancestor_path FROM t_node WHERE node_id=?_n)wt),?_n,',%'
  4. OR node_id=?_n ; 
  1. DELETE FROM t_node  
  2. WHERE ancestor_path LIKE CONCAT( 
  3. (SELECT * FROM (SELECT ancestor_path FROM t_node WHERE node_id=?)wt), 
  4. ?,',%'

删除的核心在于where,和获取所有后代节点的where可以说是完全一样的。

4 祖先路径的重置

有可能你此前的某个数据库表格没有应用过祖先路径,但已经积聚了必定量的数据,或者之前应用了祖先路径,但因为某种原因导致祖先路径的一些数据更新缺点。因为祖先路径本质上是一个冗余字段,所以照样可以经由过程父id的方法将之还原重置。

  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `p_reset_organ_path`(OUT resultMark varchar(50)) 
  2. BEGIN  
  3.     /* 
  4.     应用前的解释: 
  5.     1.本存储过程非客户应用,且自良士应用频率同样较低,故过程更便利调试,但效力不是很高; 
  6.     2.如不雅履行SELECT * FROM t_organ WHERE

      推荐阅读

      每个程序员都该知道的五大定律

    定律-或称轨则,可以指导我们并让我们在错误的缺点中进修。这篇文┞仿中,我将介绍我每次设计或实现软件时涌如今我脑海的五大年夜定律。个中有些和开辟有关,有些和体系组织有关。它们可以赞助你成为合>>>详细阅读


    本文标题:MySQL树状数据的数据库设计

    地址:http://www.17bianji.com/lsqh/37612.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)