Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL用户变量

MySQL用户变量怎么定义?set和select用法详解一看就懂

作者:依米娜娜

还在为SQL语句间传递数据发愁?本文带你快速掌握MySQL用户变量的定义与使用,详解set和select两种赋值方式,避开常见陷阱,让你的查询更高效灵活

用户变量

使用场景:定义一个值,方便其他的SQL使用,相当于在不同的SQL之间进行传递变量使用。

两种定义用户变量的方式:set select 

set的使用方法: 

set @变量名 {= | := } value [,@变量名 {= | := } value,…] ; 

set的合法变量值:

例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语句之前执行

用户变量的生命周期:

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文