变量 学习变量:为什么要学习变量,因为我们在后面的函数和存储过程的学习过程中要使用到变量,所以这块知识其实是比较重要的。 变量的分类: 系统变量: 全局变量 会话变量 自定义变量: 用户变量 局部变量 一:系统变量 说明:变量由系统提供,不是用户定义,属于服务器层面。 语法; 1.查看所有的系统变量 show GLOBAL|[SESSION] VARIABLES; 2.查看满足条件的部分系统变量 show GLOBAL |[session] VARIABLES like '%char%'; 3.查看指定的某个系统变量的值 select @@global|[session] .系统变量; 4.为某个系统变量赋值 方式一: set GLOBAL|[session] 系统变量名=值; 方式二: set @@global|[session] .系统变量名=值; 举例子:全局变量 全局变量 作用域:服务每次重新启动将为所有的全局变量付初始值,针对于所有的会话连接都有效,但是不能跨重启,重新启动之后,我们发现还是之前的老样子,要是重新启动之后有效果,那只能关掉服务,修改配置文件了。,一般情况下,我们也不这样操作。 1.查看所有全局变量 show GLOBAL VARIABLES; 2.查看部分的全局变量 show global VARIABLES like '%char%'; 3。查看指定的全局变量 select @@global.autocommit; select @@tx_isolation; 4.为某个指定的全局变量赋值,,这种赋值是跨链接的。 set @@global.autocommit=0; set @@global.autocommit=1; 会话变量 特点,仅仅针对于当前会话连接有效 1.查看所有的会话变量 show VARIABLES; show SESSION VARIABLES;--这两种写法最终出来的效果是一样的 2.查看部分的会话变量 show VARIABLES like '%char%'; show session variables like '%char%'; 3.查看指定的某个会话变量 select @@tx_isolation; select @@session.tx_isolation; 4.为某个会话变量赋值 方式一 set @@tx_isolation='read-UNCOMMITTED'; 方式二 set session tx_isolation='read-UNCOMMITTED';--这两种方式都是可以的 #################################################华丽丽滴分割线###################################################################### 二、自定义变量 说明:变量是用户自定义的,不是由系统提供的 使用步骤: 声明 赋值 使用(查看、比较、运算等) 一共分为一下两类 1、用户变量 赋值的操作符:=或:= 作用域:针对当前会话有效,同于会话变量的作用域 应用在任何地方,也就是begin end 里面或者外边 (1)声明并初始化 set @用户变量名=值;或 set @用户变量名:=值;或 select @用户变量名:=值; (2) 赋值(更新用户变量的值) 方式一:通过set和select set @用户变量名=值;或 set @用户变量名:=值;或 select @用户变量名:=值; 案例:这是一种弱类型语言,不用声明变量的类型 set @name='john'; set @name=100; 方式二:通过select into select 字段 into 变量名 from 表; 案例 set @count=1;#先声明这个变量,并给这个变量附上默认值 #将员工表中的记录条数查询出来赋值给这个变量 select count(*) into @count from employees; (3) 使用(查看用户变量的值) select @用户变量名; select @count;--结果:107 2、局部变量 作用域:仅仅在定义它的begin end中是有效的,应用在begin end中的第一句话 (1)声明 declare 变量名 类型; DECLARE 变量名 类型 default 值; (2)赋值 方式一:通过set和select set 局部变量名=值;或 set 局部变量名:=值;或 select @局部变量名:=值; 方式二:通过select into select 字段 into 局部变量名 from 表; (3)使用 select 局部变量名 对比用户变量和局部变量; 案例:申明两个变量并附初始值,求和,并进行打印 1.用户变量 set @m=1; set @n=1; set @sum= @m+@n; SELECT @sum;--结果显示:2 2.局部变量 declare m int default 1; DECLARE n int default 2; set sum=m+n; select sum; 运行结果:> 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'declare m int default 1' at line 1 意思是:declare只能使用begin end中的第一句,这样使用是不行的;
对比用户变量和局部变量
作用域 | 定义和使用位置 | 语法 | |
---|---|---|---|
用户变量 | 当前会话 | 会话中的任何地方 | 必须加@符号,不用限定类型 |
局部变量 | begin end中 | 只能在begin end中,且未第一句话 | 一般不用加@符号,需要限定类型 |