我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySql变量用法详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySql变量用法详解

自我介绍

我是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_idFROM 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 UNIONSELECT au.menu_id, au.menu_name, au.parent_menu_idFROM 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

来源地址:https://blog.csdn.net/cz285933169/article/details/128962282

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySql变量用法详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL详细讲解变量variables的用法

目录变量 variables1、系统变量1.1、查看系统变量1.2、修改系统变量2、会话变量3、局部变量4、变量作用域4.1、局部作用域4.2、会话作用域4.3、全局作用域变量 variablesmysql本质是一种编程语言1、系统变量
2022-06-18

Shell PATH变量用法详解

前面章节我们说过,程序脚本要想在 linux 中运行,需要使用绝对路径或相对路径指定这个脚本所在的位置。但是为什么系统命令都没有指定路径而是直接执行的?比如,ls 命令并没有输入"/bin/ls"来执行,而是直接执行"ls"命令。这就是 P
2022-06-04

Python __all__变量用法示例详解

这篇文章主要介绍了Python __all__变量用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-14

mysql变量用法实例分析【系统变量、用户变量】

本文实例讲述了mysql变量用法。分享给大家供大家参考,具体如下: 本文内容:系统变量用户变量局部变量首发日期:2018-04-18系统变量:系统变量就是系统已经提前定义好了的变量系统变量一般都有其特殊意义。比如某些变量代表字符集、某些变量
2022-05-15

mysql用户变量与set语句示例详解

1 用户变量介绍用户变量即用户自己定义的变量,我们可以给用户变量分配值,并且可用在任何可以正常使用标量表达式的地方。 引入用户变量之前我们必须使用set语句或select语句来定义它,然后为它赋一个值,否则变量就只有一个空值。 用户变量与连
2022-05-27

详解shell 变量的高级用法示例

变量删除和替换案例:从头开始匹配,将符合最短的数据删除 (#)variable_1="I love you, Do you love me" echo $variable_1 variable_2=${variable_1#*ov} ech
2022-06-04

详解shell 变量

1.简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell变量也遵循这个规则。 在Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没
2022-06-04

Shell编程之变量的高级用法详解

变量替换语法说明${变量名#匹配规则}从变量开头进行规则匹配,将符合最短的数据删除${变量名##匹配规则}从变量开头进行规则匹配,将符合最长的数据删除${变量名%匹配规则}从变量尾部进行规则匹配,将符合最短的数据删除${变量名%%匹配规则}
2022-06-04

详解Go语言变量作用域

目录局部变量全局变量形式参数初始化局部和全局变量作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。 Go 语言中变量可以在三个地方声明:函数内定义的变量称为局部变量函数外定义的变量称为全局变量函数定义中的变量称为形
2022-06-07

编程热搜

目录