MySql中@符号的使用(@i)
@
符号的作用
@
后接变量名,用以定义一个变量,该变量的有效期为语句级,即再一次执行中始终有效.
select @a;
变量名,如果你不加的话,会认为这是一个列名,但是这列不存在,就报错了;
@变量名
: 定义一个用户变量.=
对该用户变量进行赋值.
用户变量赋值有两种方式: 一种是直接用=
号,另一种是用:=
号。
其区别在于:
- 使用
set
命令对用户变量进行赋值时,两种方式都可以使用; - 用
select
语句时,只能用:=
方式,因为select
语句中,=
号被看作是比较操作符。
1 创建常量,起别名a
select @l := 0 a
2 增加临时表,实现变量的自增 @i:=@i+1
@i:=@i+1
可以在生成查询结果表的时候生成一组递增的序列号
SELECT (@i:=@i+1),t.* FROM table_name t,(SELECT @i:=0) AS j
(@i:=@i+1)代表定义一个变量,每次叠加1;
(SELECT @i:=0) AS j 代表建立一个临时表,j是随便取的表名,但别名一定要的。
3 实现排序递增
SELECT
( @i := @i + 1 ),
p.*
FROM
( SELECT * FROM sys_region ORDER BY create_time DESC ) p, ( SELECT @i := 0 ) k
也可以依据表字段实现递增
4 实现分组递增
SELECT
@r := CASE WHEN @type = a.LEVEL THEN
@r + 1
ELSE
1
END AS rowNum,
@type := a.`level` AS type,
a.id
FROM
sys_region a,( SELECT @r := 0, @type := '' ) b;
level
代表等级,如果等级相同,则rownum
自增+1,这种格式的sql
具体是如何使用的.
这里用了临时变量@type,因为对临时变量操作的时候,被使用的变量都是临时变量。