存储过程--树的插入、遍历、删除.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
存储过程--树的插入、遍历、删除

MySQL存储过程分析与应用 我的项目:利用存储过程实现树的操作——初始化 树的创建 设计树的存储格式 选择双亲表示法,即:id—自己的id,pid—父节点id 存储过程实现,即运用 存储过程创建表 利用存储过程实现树的插入 存储过程的语法 call InsertTree(pid,id,@re); @re 作为判断插入是否成功的标志 pid为要插入节点的父节点id id为要插入的节点 树的遍历 实现方法 利用临时表充当队列,实现对树的按层遍历 临时表的设计 具体实现 将要遍历的节点的id插入到临时表中 当临时表不空时,从临时表中取节点id,并将tree中pid为当前节点id的id插入到临时表中。当该节点符合深度和宽度的限制时,插入到遍历表中。将该节点信息从临时表中删除。 查询遍历表得到遍历结果 将父节点为当前节点的节点插入到临时表中: 存储过程为 StoreData 将符合条件的节点插入到遍历表中: 存储过程为StoreTravelData 将父节点为当前节点的所有节点插入到临时表中 (存储过程为 StoreData) 由于在存储过程中对结果集的select into 运行时提示出错,所以选用了游标进行结果的提取。 declare cur CURSOR FOR SELECT tree.id from tree,tem_table where tem_table.id = startid and tree.pid = tem_table.tree_id ; DECLARE CONTINUE HANDLER FOR NOT FOUND SET b =-1; 将符合条件的节点插入到遍历表中: (存储过程为StoreTravelData) 为了下一步界面设计,限制了每次查询显示的深度和宽度,因此对要插入的节点进行判断,只有深度和宽度在要遍历的深度和宽度范围之内才会插入到遍历表中 实现思想: 利用临时表充当队列,将要删除的节点的子孙节点删除 临时表 create temporary table if not exists d_table( id int primary key auto_increment, tid int); 具体实现 要删除的节点如果为根节点,直接遍历树,然后初始化这棵树 查询树中是否有当前节点,如果有插入到临时表中 当删除表不空时,从临时表中取节点id,并将tree中pid为当前节点id的id插入到临时表中。同时从临时表中删除该节点。将节点信息插入到删除表中。 插入临时表中 从临时表中选取节点id,然后从树中选择所有父节点是当前节点id的节点,然后插入到临时表中。在这里同样用到了游标,实现对结果集的单一提取。 插入到删除表中 当要删除的节点为根节点,即:删除整棵树时,直接初始化这棵树,没有插入到删除表中。 当要删除的节点不是根节点时,将从临时表中选择的节点插入到删除表中。 主要表结构 树 删除表 删除临时表 我的收获 对数据结构中递归和树等数据结构的理解更加深刻 运用非递归实现树的遍历,删除等操作 对mysql的基本操作更加熟悉 对sql语句的语法,限制等有了更深的理解 能运用存储过程实现基本的mysql操作 * * 生产实习验收报告 delimiter // create procedure InitTree() BEGIN drop table if exists tree; create table tree( id integer primary key, pid integer not null ); insert into tree(id ,pid ) values 1,0); END// delimiter ; 我的项目:利用存储过程实现树的操作——插入 delimiter // create procedure InsertTree(parent_id integer,id integer,inout re int) BEGIN declare bExist integer; select count(*) into bExist from tree where tree.id = parent_id; if bExist = 1 then insert into tree(pid,id) values(parent_id,id); set re = 1; else set re = 0; end if; end // delimiter ; 我的项目:利用存储过程实现树的操作——遍历 create temporary table if not

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档