sql中的3个?均为要参加父节点的id。
2. 更新(含子节点)
如不雅更新的时刻,父节点的地位没有变更,则不必推敲太多;
如不雅须要更新地点父节点,比拟于最简单的树节点设计模式,增长祖先路径的方法除了在更新当前节点本身的父id外,还须要修改对应的祖先路径,这个步调经由过程存储过程实现,是一种比较简单的方法,在此不赠予陈。仅对不应用存储过程的方法进行描述。
个中?_n表示要修改的节点的id,?_p表示要修改的节点的新父节点的id。
同样要重要先删除所有后代节点,再删除本节点;
注:应用该sql必定要先更新子节点的祖先路径,再更新本节点的祖先路径,如不雅是应用存储过程的话就可以疏忽这一点了。
3. 删除(含子节点)
- UPDATE t_node SET p_id=?_p WHERE node_id=?_n;
- 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))
- WHERE ancestor_path LIKE CONCAT((SELECT * FROM (SELECT @ppath:=ancestor_path FROM t_node WHERE node_id=?_n)wt),?_n,',%')
- OR node_id=?_n ;
- DELETE FROM t_node
- WHERE ancestor_path LIKE CONCAT(
- (SELECT * FROM (SELECT ancestor_path FROM t_node WHERE node_id=?)wt),
- ?,',%')
删除的核心在于where,和获取所有后代节点的where可以说是完全一样的。
4 祖先路径的重置
有可能你此前的某个数据库表格没有应用过祖先路径,但已经积聚了必定量的数据,或者之前应用了祖先路径,但因为某种原因导致祖先路径的一些数据更新缺点。因为祖先路径本质上是一个冗余字段,所以照样可以经由过程父id的方法将之还原重置。
- CREATE DEFINER=`root`@`localhost` PROCEDURE `p_reset_organ_path`(OUT resultMark varchar(50))
- BEGIN
- /*
- 应用前的解释:
- 1.本存储过程非客户应用,且自良士应用频率同样较低,故过程更便利调试,但效力不是很高;
- 2.如不雅履行SELECT * FROM t_organ WHERE
推荐阅读
定律-或称轨则,可以指导我们并让我们在错误的缺点中进修。这篇文┞仿中,我将介绍我每次设计或实现软件时涌如今我脑海的五大年夜定律。个中有些和开辟有关,有些和体系组织有关。它们可以赞助你成为合>>>详细阅读
本文标题:MySQL树状数据的数据库设计
地址:http://www.17bianji.com/lsqh/37612.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示