mysql 当变量存在=_Mysql变量

本文详细介绍了MySQL中的四种变量类型:全局变量、会话变量、用户变量和局部变量。全局变量对所有连接生效,会话变量只在当前连接有效,用户变量允许自定义,而局部变量局限于BEGIN/END语句块内。文章通过实例展示了如何声明、查询和修改这些变量,并探讨了=和:=的区别以及INTO和:=在赋值时的差异。
摘要由CSDN通过智能技术生成

Mysql变量

之前对mysql的变量概念很模糊, 作为一个有上进心的程序员有必要系统的理一下mysql的变量

mysql中变量可以分为全局变量, 会话变量, 用户变量和局部变量4个变量

1. 全局变量

全局变量就是mysql的系统变量, 我们只能访问有修改它, 但是不能申明它

全局变量在mysql中和 global 这个关键字息息相关的, 一般使用时 show global variables like '%log%'

全局变量是不可以自定义的

## 申明一个全局变量

set @@global.globalvar:='zhangsam';

## mysql系统会提示下面的错误

# ERROR 1193 (HY000): Unknown system variable 'globalvar'

查看全局变量

## 下面的两种方式都是可以的

## 该方式可以使用模糊匹配

show global variables like '%timeout%';

## 该方式必须清晰的记得变量的名称

select @@global.connect_timeout;

修改全局变量

## 修改和查看一样也有两种方式

set global lock_wait_timeout=60

set @@global.lock_wait_timeout=60;

2. 会话变量

会话变量也是session变量, 该变量的作用范围是当前的连接, 默认是和全局变量一致的, 当前会话修改后全局变量不会发生变更

会话断开重连后该域中设置的变量将会被重置

会话变量是不可以自定义的

## 申明一个会话变量

set @@session.globalvar:='zhangsam';

set @@globalvar:='zhangsam';

## mysql系统会提示下面的错误

# ERROR 1193 (HY000): Unknown system variable 'globalvar'

查询会话变量

## 会话变量有下面的四种访问方式, 默认访问的当前session的变量

show session variables like '%timeout%';

show variables like '%timeout%';

select @@session.lock_wait_timeout;

select @@lock_wait_timeout;

修改会话变量

## 修改session变量也存在四种方式

set session lock_wait_timeout=80;

set lock_wait_timeout=80;

set @session.lock_wait_timeout=80;

set @lock_wait_timeout=80;

3. 用户变量

用户变量和session变量的作用域一致都是当前会话, 唯一差别可能就是用户变量可以自定义

用户变量不需要申明, 直接使用即可

用户变量自赋值

## mysql中下面的3中方式都可以给用户变量赋值

set @name='zhangsam';

select @name:=`name` from user limit 0,1;

select `name` into @name from user limit 0,1;

用户变量查询

select @name;

4. 局部变量

mysql的局部变量和java的局部变量相识, 只能作用在方法中(begin/end语句块中), 使用前需先使用 declare 申明

申明

## 申明变量, 方式和表属性一致

declare name varchar(32) default '';

赋值

## 下面2中方式都可以为局部变量赋值

set name:='zhangsam';

select `name` into name from user limit 0,1;

关于 = 和 := 的区别

mysql中 = 一般是做比较的, 而:= 才是赋值, 在不引起歧义的情况下 = 和 := 是通用的

## 这种情况就不能赋值, 因为select中会将 `=` 解析为判断符

select @name=`name` from user where id='1717e83b335811eaa04a00ace989c008';

## 所以该情况下只能使用 `:=` 赋值

select @name:=`name` from user where id='1717e83b335811eaa04a00ace989c008';

关于 := 和 into 的区别

mysql中这两种方式都能在select被赋值, 区别也就下面的一点区别

局部变量只能使用 into 赋值

用户变量可以使用 into 和 := 赋值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值