Oracle中有一个伪列rownum,可以在生成查询结果表的时候生成一组递增的序列号,但是MySQL中没有这个伪列,所以可以用如下方法模拟生成一列自增序号。

  1. SELECT a.i, a.*
  2. FROM (
  3. SELECT (@i:=@i+1) i,t.*
  4. FROM sys_user t ,(SELECT @i:=0) AS it
  5. ORDER BY t.update_date DESC) a
  6. ORDER BY a.i

1、@和@@符号使用说明

在mysql中@是用户变量(自定义),@@是系统变量。
用户定义变量SET @_var_name_ = _expr_ [, @_var_name_ = _expr_]
获取用户定义变量SELECT @var_name

查看系统变量
image.png
设置系统变量语法SET GLOBAL 变量名 = 变量值

获取系统变量值
image.png

2、:=和=的区别

(1)**=**只有在setupdate时才有赋值的作用,其余都是“等于”的意思。
(2):=有赋值的作用。
(3)@num:=@num+1先执行@num+1再赋值给@num,所以能够模拟递增的序列号。
(4)@num=@num+1因为此时的=是等于的作用,@num不等于@num+1,所以始终返回0(mysql中0表示假),如果改为@num=@num,始终返回1(mysql中1表示真)。