MySql变量用法详解
创始人
2024-05-25 01:07:12

自我介绍

我是IT果果日记
一个普通的技术宅,定期分享技术文章,欢迎点赞、关注和转发,请多关照。

MySql变量主要分为系统变量、用户变量和局部变量,它们的区别是什么?分别有什么作用呢?

下面会一一给大家讲解一下,并结合一个示例,演示怎么样运用MySql变量,查询一个父节点及它的所有子节点?

系统变量

  • 系统变量就是系统已经提前定义好的变量。

  • 按作用域分类,系统变量可以分为全局变量(global)和会话变量(session)。系统变量中全局变量和会话变量其实是使用一套变量,不同的是会话变量仅当次会话生效,而全局变量一直生效。

  • 会话变量的赋值:set 变量名 = 值; 【比如常用的set names ="utf8";】或者set @@变量名 = 值。

  • 全局变量的赋值:set global 变量名 = 值。

show命令查看系统变量

show variables;
show global variables;
show session variables;
show variables like '%version%';

上述命令分别表示查看当前系统的所有变量,查看所有的全局变量和查看所有的会话变量,以及模糊匹配version,查看当前系统变量。上述命令执行结果如下:

select命令查看系统变量

select @@default_storage_engine;
select @@global.default_storage_engine;
select @@session.default_storage_engine;

上述三条命令,都表示查看default_storage_engine变量,区别在于第二条指定查看的是全局变量,第三条指定查看的是会话变量,第一条并未指定,但是在会话变量和全局变量同时存在的情况下,默认显示的是会话变量。上述命令执行结果如下:

用户变量

  • 用户变量就是用户自己定义的变量。

  • 系统为了区别系统变量跟自定义变量,规定用户自定义变量必须使用一个@符号

  • 变量的定义方式:

set @变量名=值;
select @变量名:=值;
select 值 into @变量名;
  • 用户变量可以不声明定义,就可以直接使用,不过默认是null值

  • 用户变量都是会话级的变量,仅在当次连接中生效。

此外,赋值符号 := 和 = 的区别是:

= 只有在 set 和 update 时才和 := 一样有赋值的作用,其它都是等于的作用。

:= 不只在 set 和 update 时有赋值的作用,在 select 时也是赋值的作用。

select @user_variable := @user_variable + 1; 

上述 sql 给一个用户变量 user_variable 做了+1操作,所以select的结果是2。

局部变量

作用范围在 begin 到 end 语句块之间,用 declare 语句定义的变量称为局部变量。当语句执行完毕,局部变量就消失了。

局部变量定义注意事项:必须在存储过程或函数中定义,且若不是在最开始定义的,则必须在begin end;(注意一定要加分号;)块中定义与使用。

查询一个父节点及其它的子节点

SELECT sm.menu_id, sm.menu_name, sm.parent_menu_id
FROM sys_menu sm,(SELECT @pid := (SELECT GROUP_CONCAT( menu_id ) FROM sys_menu WHERE menu_name IN ( '活动管理', '积分中心' ) AND ( parent_menu_id IS NULL OR parent_menu_id = '' ) )) pd 
WHERE FIND_IN_SET( sm.menu_id, @pid ) > 0 
UNION
SELECT au.menu_id, au.menu_name, au.parent_menu_id
FROM sys_menu au 
WHERE FIND_IN_SET( parent_menu_id, @pid ) > 0 
AND EXISTS ( SELECT @pid := concat( @pid, ',', menu_id ));

上述sql查询了两个一级菜单"活动管理"、"积分中心",以及它们下面的所有子菜单。sql由上下两部分组成,由sql关键字 union 分隔开。

  • union 上面的sql查询的是一级菜单。

用户变量 pid 被赋值为"活动管理"和"积分中心"的菜单id字符串,用 GROUP_CONCAT() 函数拼接成都逗号分隔的字符串。FIND_IN_SET(sm.menu_id, @pid) 在用户变量 pid 中搜索 sm.menu_id 的值,并返回序号(序号从1开始)

  • union 下面的sql查询的是两个一级菜单下的所有子菜单。

AND EXISTS ( SELECT @pid := concat( @pid, ',', menu_id ))

EXISTS 条件语句的作用是往用户变量 pid 后面追加子菜单id,这样就达到了向下遍历更深一级子菜单的效果。

最后的查询结果如下:

总结

  • 系统变量就是系统已经提前定义好了的变量。它可以分为全局变量(global)和会话变量(session)。

会话变量的赋值:set 变量名 = 值; 或者set @@变量名 = 值。
全局变量的赋值:set global 变量名 = 值。
  • 用户变量就是用户自己定义的变量。用户自定义变量必须使用一个@符号。

  • 用户变量的定义方式:

set @变量名=值;
select @变量名:=值;
select 值 into @变量名;
  • 作用范围在 begin 到 end 语句块之间,用 declare 语句定义的变量称为局部变量。

请联系我

我是IT果果日记
一个普通的技术宅,定期分享技术文章,欢迎点赞、关注和转发,请多关照。

https://gitee.com/chenzhaoplus

https://github.com/chenzhaoplus

https://blog.csdn.net/cz285933169?spm=1010.2135.3001.5421

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
怎么样的桃花 桃花近看远看的样... 今年的“三八”妇女节,阳光明媚,踏青赏花正当时。遂与姐妹们共赴十里蓝山,与花海来一场春天的约会。十里...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
怎么样的桃花 桃花近看远看的样... 今年的“三八”妇女节,阳光明媚,踏青赏花正当时。遂与姐妹们共赴十里蓝山,与花海来一场春天的约会。十里...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...