如何使 Mysql自动生成序号列,序号自动增长

   在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使用技巧

你可能感兴趣的:(Mysql,mysql,数据库,sql)