MySQL中使用auto_increment修改初始值和步长

 更新时间:2024年05月22日 10:30:28   作者:Clearlove7·11  
本文主要介绍了MySQL中使用auto_increment修改初始值和步长,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1、如何查看auto_increment的初始值和步长

打开黑窗口,登录管理员账号和密码后,执行以下命令:

show variables like 'auto_inc%'; -- 查看当前数据库的自增长设置

执行结果如下:

即 auto_increment的初始值(offset)是1, 步长(increment)是1. (步长指每次的递增量)。即每次递增1.

2、如何修改auto_increment的初始值和步长

在黑窗口中执行以下命令:

set @@auto_increment_increment=2; --设置步长为2
set @@auto_increment_offset=2;    --设置初始值为3

接下来做个测试:

   --创建测试表test
   create table test(
	id int(10) primary key auto_increment,
	name varchar(50)
   );
   -- 插入测试数据
   insert into test (name) values ('张三');
   insert into test (name) values ('李四');
   insert into test (name) values ('王五');

我们看下执行结果:

可以看到,修改auto_increment的初始值和步长成功 !

3、auto_increment的问题

这里以 auto_increment的默认情况为例(初始值为1,步长为1) 

有一种特殊的情况,我们一起看以下示例。

在黑窗口执行以下指令:

   -- 删除表test
   drop table test;
   -- 创建表test
   create table test(
	id int(10) primary key,
	name varchar(50)
   );
   insert into test values (1,'张三');
   insert into test values (3,'李四');
   insert into test values (5,'王五');

执行结果如下图:

接下来,我们为test表的id列添加 auto_increment

alter table test change id tid int(10) auto_increment;

因为test表中的数据 id 的值时 1、3、5 , 所以我们希望通过修改auto_increment的初始值和步长,来补充中间空缺的id的值, 

比如 2、4 ,所以 我们可以修改auto_increment的默认设置。如下指令:

   -- 修改auto_increment的初始值和步长
   set @@auto_increment_increment=2; --设置步长为2
   set @@auto_increment_offset=2;    --设置初始值

查看修改后的auto_increment相关信息:

接下来我们再次为test表插入测试数据:

   insert into test (name) values ('薛之谦');
   insert into test (name) values ('毛不易');
   insert into test (name) values ('邓紫棋');

 查询下最终的结果:

大家发现,并不是我们想要的结果。其实auto_increment在使用时,会对初始值与添加了auto_increment语法的列中的值进行比较,当 auto_increment的当前值(此处值是2)小于 添加了该语法的列的值时,auto_increment会拿当前值2 根据步长(2)递增,知道auto_increment的当前值大于添加了该语法的列(id)的值时,才会将最终的这个值作为初始插入数据的值。也就是说,执行以下流程:

auto_increment    初始值     2      步长2

插入第一条数据 '薛之谦 ' 时,会拿2跟表中数据的id的值进行比较  

2>1

2<3    auto_increment 此时会递增一次,递增后的结果是4

4>3

4<5  auto_increment 此时会继续递增一次,递增后的值是6

6>5  

此时表中已经没有其他的数据,6最大,此时才执行插入 第一条数据 '薛之谦',因此,'薛之谦' 的 id = 6,

因为步长是2,所以后面id的值依是 id = 8 ,id= 10 . 所以才会发生刚刚大家的那种情况。

auto_increment 在插入数据时,真正一开始可以插入表中的值得计算公式:

假设 a 为 表中id列的最大值, b为auto_increment的初始值,c 为步长,则auto_increment真正的初始值为:

auto_increment_real  =  int( a/b) * c + c  ;

即 auto_increment_real =(5 % 2)*2 + 2 = 6

参考mysql官方文档地址:官方文档在此,公式出自此处

到此这篇关于MySQL中使用auto_increment修改初始值和步长的文章就介绍到这了,更多相关MySQL修改初始值和步长内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈MySQL 有哪些死锁场景

    浅谈MySQL 有哪些死锁场景

    本文主要介绍了浅谈MySQL 有哪些死锁场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 深度解析MySQL 锁机制:间隙锁、Next-Key Lock 与幻读防御

    深度解析MySQL 锁机制:间隙锁、Next-Key Lock 与幻读防御

    本文深入探讨了MySQL的锁机制,特别是间隙锁(GapLock)和临键锁(Next-KeyLock),本文将从"为什么要锁间隙"出发,一路追到"为什么是左开右闭",把这套机制彻底讲透,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • MySQL常用命令 MySQL处理数据库和表的命令

    MySQL常用命令 MySQL处理数据库和表的命令

    这篇文章主要介绍了MySQL常用命令,尤其是针对MySQL处理数据库和表的命令进行学习,特别适用于新手,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • MySQL使用 B+ 树作为索引结构的示例详解

    MySQL使用 B+ 树作为索引结构的示例详解

    在日常开发中,SQL 查询速度往往决定了系统响应的快慢,而索引的底层结构直接影响数据库性能,本文我们就来揭开 B+ 树在 MySQL 中大行其道的秘密吧
    2025-07-07
  • MySQL数据库的多种连接方式及工具

    MySQL数据库的多种连接方式及工具

    本文详细的介绍了数据库的连接方式及数据库连接的工具,给初学者分享一些知识,也是学习总结,感兴趣的小伙伴可以阅读一下
    2023-03-03
  • mysql 5.7 docker 主从复制架构搭建教程

    mysql 5.7 docker 主从复制架构搭建教程

    这篇文章主要为大家详细介绍了mysql 5.7 docker 主从复制架构搭建教程,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • MySQL连接异常报10061错误问题解决

    MySQL连接异常报10061错误问题解决

    这篇文章主要介绍了MySQL连接异常报10061错误问题解决,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Mysql InnoDB删除数据后释放磁盘空间的方法

    Mysql InnoDB删除数据后释放磁盘空间的方法

    这篇文章主要介绍了Mysql InnoDB删除数据后释放磁盘空间的方法,Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长,本文就讲解释放磁盘空间的方法,需要的朋友可以参考下
    2015-04-04
  • MyCat环境搭建详细教程

    MyCat环境搭建详细教程

    这篇文章主要介绍了MyCat环境搭建详细教程的相关资料,需要的朋友可以参考下
    2022-11-11
  • mysql深度分页的几种解决方案

    mysql深度分页的几种解决方案

    MySQL深分页需避免OFFSET,改用WHERE条件定位起点,常用游标分页、延迟关联或覆盖索引优化,结合缓存可提升性能,本文主要介绍了mysql深度分页的几种解决方案,感兴趣的可以了解一下
    2025-09-09

最新评论