有参看其他博主文章:
- MySQL之系统变量与用户自定义变量:https://blog.csdn.net/qq_36528734/article/details/81187863
- mysql中视图的使用:https://blog.csdn.net/wujiangwei567/article/details/80549150
一、变量的介绍和使用
总体可分为两大类变量:
- 系统变量:包括全局变量和会话变量
- 自定义变量:包括用户变量和局部变量
系统变量 | 自定义变量 |
---|---|
全局变量(Global variable) | 用户会话变量 |
会话变量(Session variable) | 局部变量 |
1.系统变量的特点
- 每一个客户机成功连接服务器后,都会产生与之对应的会话。会话期间,服务实例会在服务器内存中生成与该会话对应的会话系统变量。这些会话系统变量的初始值就是全局系统变量值的复制。为了标记不同的会话,会话系统又新增了一些变量,这些变量是全局系统变量没有的。
- 会话系统的特点在于,它仅仅用于定义当前会话的属性,会话期间对某个会话系统变量值的修改,不会影响到其他会话同一个会话系统变量的值。
- 全局系统变量的特点在于,它是用于定义MySQL服务实例的属性、特点。当某个会话对某个全局系统变量值的修改会导致其他会话中同一全局系统变量值的修改。
- 全局系统变量对所有会话系统变量生效,会话系统变量包括全局系统变量。
- 系统变量以’@@’开头
查看变量语法:
①查看全局系统变量
show global variables
②查看当前会话的会话系统变量
show session variables或者show variables
③查看某个(些)全局系统变量
show global variables like ‘变量名’
④查看某个(些)会话系统变量
show session variables like ‘变量名’
设置相关变量语法:
① 设置全局系统变量的值
set @@global.全局系统变量名 = 值;
set global 全局变量名 = 值;
② 设置会话系统变量的值
set @@session.会话系统变量 = 值;
set session 会话系统变量名 = 值;
2.自定义变量特点
-
用户会话变量(以@开头),局部变量(不以@开头)
-
当定义了会话系统变量,在会话期间,该会话系统变量一直有效。不同会话之间的会话系统变量是不能相互访问的
-
局部变量必须定义在存储程序中(如函数、触发器、存储过程以及事件),并且局部变量的作用范围仅仅局限于存储程序中,脱离存储程序没有丝毫意义
用户变量的定义与赋值:
set方法: set @变量1 = 值1,变量2=值2;
select方法:select @变量1:=值1,变量2:=值2;
select方法二:select <field> from 表 into @变量2;
- select方法两种定义用户会话变量的区别是,方法一会产生结果集,方法二不会产生结果集。
局部变量的定义:
declare命令专门用于定义局部变量及对应的数据结构。局部变量必须定义在存储程序中(如函数、触发器、存储过程以及事件),并且局部变量的作用范围仅仅局限于存储程序中,脱离存储程序没有丝毫意义,局部变量主要用于下面三种场合:
- 定义在存储程序的begin-end语句块之间。此时,先使用declare定义,并且指定其数据类型。然后用set或select为其赋值。
- 当局部变量作为存储过程或者函数的参数使用,此时不用declare定义,但是需要指出参数的数据类型。
- 局部变量用于sql语句中。
例子:
mysql> delimiter $ # 重置命令结束