用户变量
使用场景:定义一个值,方便其他的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语句之前执行
用户变量的生命周期:
只要会话不断,该用户变量可以一直使用,如果想实现多个会话之间的用户变量传递,可以将用户变量保存到数据表中。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论