MySQL id从1开始连续自增 AUTO_INCREMENT_OFFSET AUTO_INCREMENT_INCREMENT

本文详细介绍了在MySQL中如何设置自增ID列使其从1开始并保持连续增长的方法,包括设置临时全局变量AUTO_INCREMENT_OFFSET和AUTO_INCREMENT_INCREMENT的具体步骤。同时,通过实验和公式推导,解释了自增ID的计算逻辑,包括offset和increment参数的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:
设置id列为自增,却发现id值不连续,也不是从1开始的

解决方法:
很简单,先设置临时全局变量。
设置AUTO_INCREMENT_OFFSET=1,表示id的起始值从1开始增长(但不表示第一个id就是1,看下面就懂了);
设置AUTO_INCREMENT_INCREMENT=1;表示id的增长偏移量为1,就是下一个id比上一个id大1;
tip:为什么说是临时全局变量,因为MySQL重启后就失效了,需要重新设置,永久方法请参考别处修改my.cnf

复制吧:

SET @@AUTO_INCREMENT_OFFSET=1;
SET @@AUTO_INCREMENT_INCREMENT=1;

ALTER TABLE table_name drop id;
ALTER TABLE table_name AUTO_INCREMENT=0 ;
ALTER TABLE table_name ADD id INT NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;

select * from table_name;

现在已经实现id从1开始连续自增了

闲来无事,我又翻了一些别的博客,讲的很乱,就自己实验,加手算公式,一小时后发现结论如下:

设置值小于1时,则默认取1:

  • 当offset<1时,offset=1;
  • 当increment<1时,increment=1;

第一个id值的情况不同:

  • 当offset<increment,id=offset+increment;
  • 当offset=increment,id=3*increment;
  • 当offset>increment,id=increment;

之后id值都是id=id+increment
id+increment很好理解,直到我看到大神给出的公式是这样的(current_max_value即为当前最大id):

current_max_value - (current_max_value - auto_increment_offset) % auto_increment_increment + auto_increment_increment

还有一种情况,当offset值改变时,插入的下一个id计算公式为:

id=max(id)+(new_offset-old_offset)+increment

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值