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多表连接查询的执行细节,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • mysql中Innodb 行锁实现原理

    mysql中Innodb 行锁实现原理

    InnoDB的行锁是通过索引项加锁实现的,分为使用索引和非索引字段检索的情况,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • MySQL函数与存储过程字符串长度限制的解决

    MySQL函数与存储过程字符串长度限制的解决

    本文主要介绍了MySQL函数与存储过程字符串长度限制的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 巧用mysql提示符prompt清晰管理数据库的方法

    巧用mysql提示符prompt清晰管理数据库的方法

    随着管理mysql服务器越来越多,同样的mysql>的提示符有可能会让你输入错误的命令到错误的数据库,这时候需要巧用mysql的提示符,这是我的提示符root@localhost(mysql) 08:55:21> 用prompt命令实现(适用于windows和linux环境)
    2009-08-08
  • Mysql| 使用通配符进行模糊查询详解(like,%,_)

    Mysql| 使用通配符进行模糊查询详解(like,%,_)

    这篇文章主要介绍了Mysql| 使用通配符进行模糊查询详解(like,%,_),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • MySQL 动态分区管理自动化与优化实践记录

    MySQL 动态分区管理自动化与优化实践记录

    本文将详细介绍如何通过 MySQL 的存储过程和事件调度器实现动态分区管理,确保分区表能够自动适应数据增长,同时避免分区冲突,感兴趣的朋友一起看看吧
    2025-05-05
  • MySql存储表情报错的排查解决

    MySql存储表情报错的排查解决

    随着互联网的发展,产生了许多新类型的字符,例如emoji这种类型的符号,也就是我们通常在聊天时发的小黄脸表情,下面这篇文章主要给大家介绍了关于MySql存储表情报错的排查解决,需要的朋友可以参考下
    2022-07-07
  • 关于Mysql隔离级别、锁与MVCC介绍

    关于Mysql隔离级别、锁与MVCC介绍

    本篇文章给大家详细介绍了一下关于Mysql隔离级别、锁与MVCC的相关知识,有这方面兴趣的朋友参考下。
    2018-01-01
  • 彻底删除MySQL步骤介绍

    彻底删除MySQL步骤介绍

    大家好,本篇文章主要讲的是彻底删除MySQL步骤介绍,感兴趣的赶紧来看看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • MySQL查询优化--调整内部变量的详解

    MySQL查询优化--调整内部变量的详解

    本篇文章是对MySQL查询优化中的调整内部变量进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论