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 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/ ,谢谢合作。
MySQL 查询树结构、循环查询、查看函数、视图、存储过程的更多相关文章
- 【软件实施面试】MySQL和Oracle联合查询以及聚合函数面试总结
软件实施面试系列文章第二弹,MySQL和Oracle联合查询以及聚合函数的面试总结.放眼望去全是MySQL,就不能来点Oracle吗?之前面过不少公司,也做过不少笔试题,现在已经很少做笔试题了.你肚子 ...
- 【MySQL】-2 函数、分组、子查询、联合查询
函数 Mysql的函数特性没有SQL可移植性强. 大多数情况下支持的函数: 处理文本串的函数: RTrim():处理列值右边的空格 LTrim():处理列值左边的空格 Trim():处理列值的左右 ...
- sql:sql server,MySQL,PostgreSQL的表,视图,存储过程结构查询
sql server 2005: --SQL SERVER 2005 生成代码需要知道的SQL语句 use LibrarySystem --查询当前数据库所有表和其的主键字段,字段类型,长度,是否为空 ...
- MYSQL - 外键、约束、多表查询、子查询、视图、事务
MYSQL - 外键.约束.多表查询.子查询.视图.事务 关系 创建成绩表scores,结构如下 id 学生 科目 成绩 思考:学生列应该存什么信息呢? 答:学生列的数据不是在这里新建的,而应该从学生 ...
- SQL Server -- 回忆笔记(四):case函数,索引,子查询,分页查询,视图,存储过程
SQL Server知识点回忆篇(四):case函数,索引,子查询,分页查询,视图,存储过程 1. CASE函数(相当于C#中的Switch) then '未成年人' else '成年人' end f ...
- 【mysql】 mysql 子查询、联合查询、模糊查询、排序、聚合函数、分组----------语法
第二章 mysql 一.模糊查询 like 1. 字段 like '河北省%' %代表任何N个字符 2 字段 like '河北省____' _代表任意1个字符 二.IN 语法:SELECT 字段列1, ...
- Mysql优化之Explain查询计划查看
我们经常说到mysql优化,优化中一种常见的方式就是对于经常查询的字段创建索引.那么mysql中有哪些索引类型呢? 一.索引分类1.普通索引:即一个索引只包含单个列,一个表可以有多个单列索引 2.唯一 ...
- 在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值)
原文:在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. sql循环取差值,该怎 ...
- SQLserver查询作业、视图、函数、存储过程中的关键字
一.查询视图.函数.存储过程中的关键字 SELECT a.name,a.[type],b.[definition] FROM sys.all_objects a,sys.sql_modules b W ...
- (四)MySQL条件查询(通配符、模糊查询)、排序查询、分组查询(单行、分组函数)
一.条件查询 1.含义:前面学的基础查询可以查询一个或多个字段,如果需要的数据仅仅是其中的某一行或多行就用到了条件查询. 2.语法:(序号表示语句执行顺序) SELECT 字段名 ③ FROM 表名 ...
随机推荐
- neo4j存储数据-图数据库
1. 简介 本文主要介绍neo4j是如何将图数据保存在磁盘上的,采用的是什么存储方式.分析这种存储方式对进行图查询/遍历的影响. 2. 图数据库简介 生产环境中使用的图数据库主要有2种,分别是带标签的 ...
- web95 比较麻烦的interval绕过
审计 include("flag.php"); highlight_file(__FILE__); if(isset($_GET['num'])){ $num = $_GET['n ...
- InfluxDB修改数据存储位置(二进制安装版)
InfluxDB修改数据存储位置(二进制安装版) 在二进制安装方式下,修改InfluxDB的数据存储位置通常涉及以下几个步骤.以下步骤以InfluxDB 2.x版本为例进行说明,因为InfluxDB ...
- tomcat 自启动脚本(普通模式)
tomcat daemon模式启停脚本 https://www.cnblogs.com/wxp100/p/14846331.html tomcat 普通模式启停脚本 vi tomcatServer.s ...
- 科研界DeepSeek+AI应用协作攻略来了!
自从DeepSeek爆火 AI应用届开启"精英集结" 与DeepSeek携手撑起国产AI一片天 比如,DeepSeek+Midjourney 成为设计师的好帮手 DeepSeek+ ...
- Element-UI 使用心得之el-card
el-card 是Element-UI 内置的卡片组件,使用起来很方便,但是对Vuejs和html 不是精通的话,根据自己的要求布局,会出现自己的小困惑,必须添加垂直居中,按照CSS 布局设置,总是 ...
- 『Python底层原理』--Python属性的工作原理
Python中的属性操作(如获取.设置和删除属性)是我们日常编程中非常常见的操作. 但你有没有想过,当我们写下obj.attr或obj.attr = value时,Python 内部究竟发生了什么? ...
- macbookpro m3本地部署DeepSeek模型
macbookpro m3有着十分强大的性能.在deepseek如火如荼的当下,可以尝试在本地部署并使用.还可以将自己的文档作为语料喂给deepseek,使其能成为自己专属的AI助手. 本文介绍使用o ...
- 当 GPT 告诉我9.11大于9.9的时候:AI 仍需完善的一面
在当今 AI 技术飞速发展的时代,我们对其能力寄予了厚望,期待它们能够准确无误地处理各种任务.然而,最近发生的一件事情让我们意识到,AI 仍然有需要改进和完善的地方. GPT 作为一款备受瞩目的语言模 ...
- Hadoop - hadoop自带MR案例:词频 WordCount
词频 Word Count 1.在浏览器上访问 https://node01:9870 2.创建目录 /user 目录 bin/hdfs dfs -mkdir /user 如果未配置环境变量,需要到h ...