700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > mysql 视图树查询_MySQL 查询树结构 循环查询 查看函数 视图 存储过程

mysql 视图树查询_MySQL 查询树结构 循环查询 查看函数 视图 存储过程

时间:2023-03-06 08:20:08

相关推荐

mysql 视图树查询_MySQL 查询树结构 循环查询 查看函数 视图 存储过程

MySQL经常会用到查询树结构数据,这里专门收集整了一篇。

构建函数

构建树查询函数:查询父级节点函数

--在mysql中完成节点下的所有节点或节点上的所有父节点的查询--根据传入id查询所有父节点的id

DROP FUNCTION IF EXISTS`getParList`;

delimiter//

CREATE FUNCTION `getParList`(rootId INT)RETURNS varchar(255)BEGIN

DECLARE sTemp VARCHAR(255); --设置变量

DECLARE sTempPar VARCHAR(255);SET sTemp = ‘‘;SET sTempPar =rootId;

#循环递归while sTempPar is not nullDO

#判断是否是第一个,不加的话第一个会为空IF sTemp != ‘‘ THEN

SET sTemp = concat(sTemp,‘,‘,sTempPar);ELSE

SET sTemp =sTempPar;END IF;SET sTemp = concat(sTemp,‘,‘,sTempPar);SELECT group_concat(pid) INTO sTempPar FROM china_region where pid<>id and FIND_IN_SET(id,sTempPar)>0;END WHILE;RETURNsTemp;END

//

-- id是前面表中的,110105为子级id

select * from china_region where FIND_IN_SET(id,getParList(110105));

构建树查询函数:查询子级节点函数

--根据传入id查询所有子节点的id

DROP FUNCTION IF EXISTS`getChildList`;

delimiter//

CREATE FUNCTION `getChildList`(rootId INT)RETURNS varchar(255)BEGIN

DECLARE sTemp VARCHAR(255);DECLARE sTempChd VARCHAR(255);SET sTemp = ‘‘;SET sTempChd =rootId;WHILE sTempChd is not nullDOSET sTemp = concat(sTemp,‘,‘,sTempChd);SELECT group_concat(id) INTO sTempChd FROM china_region where FIND_IN_SET(pid,sTempChd)>0;END WHILE;RETURNsTemp;END

//

-- id是前面表中的,110000为父级id

select * from china_region where FIND_IN_SET(id,getChildList(110000));

-- 批量更新

updatechina_regionset sort_number = CASE `level`when 0 then 0

when 1 then 100

when 2 then 200

when 3 then 300

end,

label= case `level`when 1 then ‘value1‘

when 2 then ‘value2‘

when 3 then ‘value3‘

ELSE ‘others‘

end

where id >= 100000 and id <120000 ;

-- 清空 sort_number 和 label 列

UPDATE china_region set sort_number=NULL, label=NULL;

构建循环查询函数:循环查询函数

--循环查询

delimiter $$drop function if existsloops;create function loops(num int) returns varchar(255)begin

declare i int default 110101;declare result varchar(255) default ‘‘;

lpl:loop--lp1 为循环体名称 LOOP 为关键字

if result != ‘‘ then

set result=concat(result,‘,‘,i);else

set result=i;end if;update china_region set sort_number=i where id=i;set i=i + 1;if i>numthenleave lpl;--离开循环体

end if;end loop lpl; --结束循环

returnresult;end$$

delimiter;

-- 循环查询序号+1

select loops(110117);

构建拼接函数:循环拼接函数

--循环拼接组合

delimiter $$drop function if existsfun_addStr;create function fun_addStr(str1 varchar(32),str2 varchar(32),num int) returns varchar(200)begin

declare i int default 1;declare result varchar(200) default ‘‘;set result=str1;

myloop:loopset i=i+1;set result=concat(result,str2);if i>numthenleave myloop;end if;endloop myloop;returnresult;end$$

delimiter;

-- 循环拼接组合

select fun_addStr(‘字符串一‘,‘字符串二‘,3);

存储过程

-- 查询数据库中的存储过程和函数

select `name` from mysql.proc where db = ‘testdb‘ and `type` = ‘PROCEDURE‘; --存储过程

select * from mysql.proc where db = ‘testdb‘ and `type` = ‘PROCEDURE‘ and name=‘xx‘;select `name` from mysql.proc where db = ‘testdb‘ and `type` = ‘FUNCTION‘; --函数

show procedure status; --存储过程

show function status; --函数

-- 查看存储过程或函数的创建代码

show create procedureproc_name;

showcreate function func_name;

-- 查看视图

SELECT * from information_schema.VIEWS; --视图

SELECT * from information_schema.TABLES; --表

-- 查看触发器

SHOW TRIGGERS [FROM db_name] [LIKE expr];

SELECT * FROM information_schema.`TRIGGERS` T WHERE trigger_name=‘mytrigger‘;

作者:Jason Zeng 于 -06-14

博客:/zengming/

GItHub:/lovelifeming

严正声明:

1.由于本博客部分资源来自互联网,版权均归原作者所有。转载的目的是用于学术交流与讨论学习,将不对任何资源负法律责任。

2.若无意中侵犯到您的版权利益,请来信联系我,我会在收到信息后会尽快给予处理!

3.所有资源内容仅供学习交流之用,请勿用作商业用途,谢谢。

4.如有转发请注明出处,来源于/zengming/ ,谢谢合作。

原文:/zengming/p/12576531.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。