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

 更新时间:2023年07月17日 17:08:01   作者: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;

总结

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

相关文章

  • MySQL插入时间戳字段的值实现

    MySQL插入时间戳字段的值实现

    在MySQL中,我们经常会遇到需要插入时间戳字段的情况,包括使用NOW()函数插入当前时间戳,使用FROM_UNIXTIME()插入指定时间戳,本文就来介绍一下,感兴趣的可以了解一下
    2024-09-09
  • Mysql脏页flush及收缩表空间原理解析

    Mysql脏页flush及收缩表空间原理解析

    这篇文章主要介绍了Mysql脏页flush及收缩表空间原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 解决MYSQL连接端口被占引入文件路径错误的问题

    解决MYSQL连接端口被占引入文件路径错误的问题

    下面小编就为大家带来一篇解决MYSQL连接端口被占引入文件路径错误的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • MySQL怎么给字符串字段加索引

    MySQL怎么给字符串字段加索引

    本文主要介绍了MySQL怎么给字符串字段加索引,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Mysql数据库报错2003 Can't connect to MySQL server on 'localhost' (10061)解决

    Mysql数据库报错2003 Can't connect to MySQL server on 

    最近在用mysql,打开mysql的图形化界面要连接时出现2003错误,所以下面这篇文章主要给大家介绍了关于Mysql数据库报错2003 Can't connect to MySQL server on 'localhost' (10061)的解决方式,需要的朋友可以参考下
    2022-09-09
  • MacOS下mysql 8.0.18 安装配置方法图文教程

    MacOS下mysql 8.0.18 安装配置方法图文教程

    这篇文章主要介绍了MacOS下mysql 8.0.18 安装配置方法图文教程,并成功命令行操作,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • MySQL数据库常用命令小结

    MySQL数据库常用命令小结

    这篇文章主要介绍了MySQL数据库命令,主要包括对数据库常用命令及数据库中对表的命令,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • MySQL悲观锁与乐观锁的实现方案

    MySQL悲观锁与乐观锁的实现方案

    我们知道Mysql并发事务会引起更新丢失问题,解决办法是锁,所以本文将对锁(乐观锁、悲观锁)进行分析,这篇文章主要给大家介绍了关于MySQL悲观锁与乐观锁方案的相关资料,需要的朋友可以参考下
    2021-11-11
  • mysql跨数据库复制表(在同一IP地址中)示例

    mysql跨数据库复制表(在同一IP地址中)示例

    这篇文章主要介绍了mysql跨数据库复制表(在同一IP地址中)示例,需要的朋友可以参考下
    2014-03-03
  • SQL JOIN 子句合并多个表中相关行全面指南

    SQL JOIN 子句合并多个表中相关行全面指南

    这篇文章主要为大家介绍了SQL JOIN 子句合并多个表中相关行全面指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论