问题:
设置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