ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2020-06-14 17:55:06  阅读:253  来源: 互联网

标签:SET 树结构 视图 查询 sTemp result where id


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 null DO 
        #判断是否是第一个,不加的话第一个会为空
        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; 
RETURN sTemp; 
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 null DO
        SET sTemp = concat(sTemp,',',sTempChd);
        SELECT group_concat(id) INTO sTempChd FROM china_region where FIND_IN_SET(pid,sTempChd)>0;
    END WHILE;
    RETURN sTemp; 
END
//

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

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

-- 批量更新

update china_region
    set 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 exists loops;
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>num
        then
        leave lpl;  -- 离开循环体 
        end if;
    end loop lpl;  -- 结束循环 
    return result;
end $$
delimiter;

-- 循环查询序号+1

select loops(110117);

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

-- 循环拼接组合
delimiter $$
drop function if exists fun_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:loop
        set i=i+1;
        set result=concat(result,str2);
        if i>num
        then
        leave myloop;
        end if;
    end loop myloop; 
    return result;
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 procedure proc_name;
show create 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 于 2020-06-14
博客:http://www.cnblogs.com/zengming/ 
GItHub:https://github.com/lovelifeming
严正声明:
1.由于本博客部分资源来自互联网,版权均归原作者所有。转载的目的是用于学术交流与讨论学习,将不对任何资源负法律责任。
2.若无意中侵犯到您的版权利益,请来信联系我,我会在收到信息后会尽快给予处理!
3.所有资源内容仅供学习交流之用,请勿用作商业用途,谢谢。
4.如有转发请注明出处,来源于http://www.cnblogs.com/zengming/ ,谢谢合作。

标签:SET,树结构,视图,查询,sTemp,result,where,id
来源: https://www.cnblogs.com/zengming/p/12576531.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有