Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > Mysql自动生成序号列,序号自动增长

如何使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 :

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;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文