mysql之用户变量

本文介绍了MySQL中的用户变量,包括定义方式、使用场景及注意事项。通过实例展示了如何设置、获取和在不同SQL语句间传递变量。用户变量在会话期间有效,可用于存储和传递数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户变量

使用场景:定义一个值,方便其他的SQL使用,相当于在不同的SQL之间进行传递变量使用。
两种定义用户变量的方式:set select
set的使用方法:
set @变量名 {= | := } value [,@变量名 {= | := } value,…] ;
set的合法变量值:
1.字面量
2.可以系统表达式
3.可以来自于一个SQL语句
4.可以是一个系统函数
例1: 定义用户变量PI,其初值为3.1415926
SET @PI := 3.1415926;
注意:用户变量的数据类型派生自其值的数据类型
例5:定义一个变量,其值是1号球队的队长号码
SET @anr := (SELECT playerno FROM teams WHERE teamno=1);
获取变量的值:
select @变量名;

注意点:
mysql> set @a=1;
Query OK, 0 rows affected (0.00 sec)
mysql> set @a=5,@b=@a;
Query OK, 0 rows affected (0.00 sec)
mysql> select @b;
±-----+
| @b |
±-----+
| 1 |
±-----+
1 row in set (0.00 sec)

当一次对多个变量定义时,MySQL会同时检测等号右边的值是否成立,如果成立则将该值赋予用户变量,所以在本次当中b的值为a的旧值。

select设置用户变量:
select :=这种方式,因为=在select当中是比较操作符。
这种语法:
1)会返回一行
2)只能使用:=,不能使用=,=号这里被看做比较操作符
例7:创建用户变量playerno并赋值为7
SELECT @playerno := 7;
例8: 定义3个用户变量
SELECT @name := ‘tom’, @town := ‘Inglewood’,
@postcode := ‘1234ab’;
例9: 查询6号球员的姓名、城市和邮编,并保存到3个变量中
SELECT @name := name, @town := town, @postcode := postcode
FROM players
WHERE playerno = 6;在这里插入图片描述
注意,如果SELECT查询返回多行,就把最后一行的值赋给变量,而不会抛出异常

例10: 定义变量@playerno,将players表中最小的球员编号赋给它:6
SELECT @playerno := playerno
FROM players
ORDER BY playerno DESC;
SELECT @playerno;
注意:当用户变量用在WHERE或者HAVING子句中时,必须首先使用另外一条语句来定义它们
例11:
SELECT @pnr7 := 7
FROM players
WHERE playerno < @pnr7;
这条语句不会返回编号小于7的球员。因为WHERE子句在SELECT语句之前执行

用户变量的生命周期:
只要会话不断,该用户变量可以一直使用,如果想实现多个会话之间的用户变量传递,可以将用户变量保存到数据表中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值