如何使Mysql自动生成序号列,序号自动增长问题
作者:charles·wang
这篇文章主要介绍了如何使Mysql自动生成序号列,序号自动增长问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
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 :
- 在SELECT 得到每一行结果集都会先自增1 ;
- 在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存储过程生成编号自增
例如
编号1,2,3,4,5…n依次递增1
CREATE PROCEDURE khbh1(out khbh varchar(255)) begin DECLARE n int; declare lsh int; – 查询系统流水表中有多少条数据 select count(*) into n from SKT176; – 如果为0,把1赋值给流水号,再将系统编号插入进系统流水表中。否则查询系统流水表中最大的起始编号,依次往上+1 IF n=0 then set lsh =1; insert into 系统流水表(起始编号) values(lsh); else select Max(起始编号) INTO lsh from 系统流水表; SET lsh=lsh+1; update 系统流水表 SET 起始编号=lsh where id=1; end if; – 输出编号1,2,3,4,5,6… set khbh=lsh; end;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。