Oracle中有一个伪列rownum,可以在生成查询结果表的时候生成一组递增的序列号,但是MySQL中没有这个伪列,所以可以用如下方法模拟生成一列自增序号。
SELECT a.i, a.*
FROM (
SELECT (@i:=@i+1) i,t.*
FROM sys_user t ,(SELECT @i:=0) AS it
ORDER BY t.update_date DESC) a
ORDER BY a.i
1、@和@@符号使用说明
在mysql中@是用户变量(自定义),@@是系统变量。
用户定义变量:SET @_var_name_ = _expr_ [, @_var_name_ = _expr_]
获取用户定义变量:SELECT @var_name
查看系统变量:
设置系统变量语法:SET GLOBAL 变量名 = 变量值
获取系统变量值:
2、:=和=的区别
(1)**=**
只有在set和update时才有赋值的作用,其余都是“等于”的意思。
(2):=
有赋值的作用。
(3)@num:=@num+1
先执行@num+1
再赋值给@num
,所以能够模拟递增的序列号。
(4)@num=@num+1
因为此时的=
是等于的作用,@num
不等于@num+1
,所以始终返回0(mysql中0表示假),如果改为@num=@num
,始终返回1(mysql中1表示真)。