MySQL中使用auto_increment修改初始值和步长
作者:Clearlove7·11
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修改初始值和步长内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!