在Oracle中有ROWNUM 这个功能,可以很方便的得到序列号。但是Mysql中始终没有实现这个功能的函数,那当我们需要的时候该怎么处理呢?
使用Msyql的自定义变量
1. 自定义变量放在FROM后面
使用 @var 定义变量 ,这个变量定义是基于connection的。也就是当连接断开重连的时候,@var中的值会被清空,因此我们最好每次都给它一个初始值。
SELECT @i:=@i+1 AS '序号' , a.name FROM AREA a,(SELECT @i:=5) i
变量 @i :
1. 在SELECT 得到每一行结果集都会先自增1 ;
2. 在FROM 后面的(SELECT @i:=5) 每次sql执行都会初始化变量@i的值为5 。
2. 自定义变量放在WHERE后面
其实这个变量的初始化值并不一定非要放在FROM后面,也可以像下面这样。这是由于 sql的执行顺序决定的,在select 执行前 初始化变量即可 。
SELECT @a:=@a+1 AS '序号' , a.name FROM AREA a WHERE (SELECT @a:=5)
区别:
在 WHERE 后面使用变量的时候, 不能初始化赋值0(WHERE (SELECT @a:=0)) ,这个是因为0在 WHERE 后面被认为是 false 。这样不能搜索到任何结果。
Mysql的执行顺序参考:Mysql书写规范 、Mysql的书写顺序执行顺序、Mysql使用技巧