MySql中@符号的使用(@i)

@符号的作用

  • @后接变量名,用以定义一个变量,该变量的有效期为语句级,即再一次执行中始终有效.

select @a;

变量名,如果你不加的话,会认为这是一个列名,但是这列不存在,就报错了;

  • @变量名 : 定义一个用户变量.
  • = 对该用户变量进行赋值.

用户变量赋值有两种方式: 一种是直接用=号,另一种是用:=号。

其区别在于:

  • 使用set命令对用户变量进行赋值时,两种方式都可以使用;
  • select语句时,只能用:=方式,因为select语句中,=号被看作是比较操作符。

1 创建常量,起别名a

select @l := 0 a

image-20220908155935266

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是随便取的表名,但别名一定要的。

image-20220908160249484

3 实现排序递增

SELECT
    ( @i := @i + 1 ),
    p.* 
FROM
    ( SELECT * FROM sys_region ORDER BY create_time DESC ) p, ( SELECT @i := 0 ) k

image-20220908160535716

也可以依据表字段实现递增

image-20220908160615661

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具体是如何使用的.

image-20220908161154861

这里用了临时变量@type,因为对临时变量操作的时候,被使用的变量都是临时变量。

posted @ 2022-09-11 18:57  哩个啷个波  阅读(3886)  评论(0编辑  收藏  举报