MySQL用户变量怎么定义?set和select用法详解一看就懂
作者:依米娜娜
还在为SQL语句间传递数据发愁?本文带你快速掌握MySQL用户变量的定义与使用,详解set和select两种赋值方式,避开常见陷阱,让你的查询更高效灵活
用户变量
使用场景:定义一个值,方便其他的SQL使用,相当于在不同的SQL之间进行传递变量使用。
两种定义用户变量的方式:set select
set的使用方法:
set @变量名 {= | := } value [,@变量名 {= | := } value,…] ; set的合法变量值:
- 1.字面量
- 2.可以系统表达式
- 3.可以来自于一个SQL语句
- 4.可以是一个系统函数
例1
定义用户变量PI,其初值为3.1415926
SET @PI := 3.1415926;
注意:用户变量的数据类型派生自其值的数据类型
例2
定义一个变量,其值是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)只能使用:=,不能使用=,=号这里被看做比较操作符
例3
创建用户变量playerno并赋值为7
SELECT @playerno := 7;
例4
定义3个用户变量
SELECT @name := ‘tom', @town := ‘Inglewood', @postcode := ‘1234ab';
例5
查询6号球员的姓名、城市和邮编,并保存到3个变量中
SELECT @name := name, @town := town, @postcode := postcode FROM players WHERE playerno = 6;

注意,如果SELECT查询返回多行,就把最后一行的值赋给变量,而不会抛出异常
例6
定义变量@playerno,将players表中最小的球员编号赋给它:6
SELECT @playerno := playerno FROM players ORDER BY playerno DESC; SELECT @playerno;
注意:当用户变量用在WHERE或者HAVING子句中时,必须首先使用另外一条语句来定义它们
例7
SELECT @pnr7 := 7 FROM players WHERE playerno < @pnr7;
这条语句不会返回编号小于7的球员。因为WHERE子句在SELECT语句之前执行
用户变量的生命周期:
只要会话不断,该用户变量可以一直使用,如果想实现多个会话之间的用户变量传递,可以将用户变量保存到数据表中。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
