设置自增初始值和步长
通过:SHOW VARIABLES LIKE 'auto_inc%';
查看当前数据库的自增长设置。
auto_increment_increment
这是自增长的步长。
auto_increment_offset
这是自增长开始的值。
现在想要更改test表的id增长开始值和增长的步长,可以使用如下方法:
SET @@auto_increment_increment=3;
– 将自增长步长设置为3
SET @@auto_increment_offset=4;
– 将自增长开始值设置为4
但是这样设置的话, Mysql重启之后, 设置会消失, 所以我们需要在配置文件中修改
Mysql的配置文件, my.ini或者my.cnf
查找配置文件: whereis my.cnf
或者:查看Mysql默认读取my.cnf的目录
命令 |
/etc/my.cnf, /etc/mysql/my.cnf, /usr/local/etc/my.cnf, ~/.my.cnf 这些就是mysql默认会搜寻my.cnf的目录,顺序排前的优先。
启动时没有使用配置文件
如果没有设置使用指定目录my.cnf文件及默认读取目录没有my.cnf文件,表示mysql启动时并没有加载配置文件,而是使用默认配置。
如果需要修改配置,可以在mysql默认读取的目录中,创建一个my.cnf文件(例如:/etc/my.cnf),把需要修改的配置内容写入,重启mysql后即可生效.
问题
查看一下结果,看是不是我们期望的值:
通过结果可以看到:从第二行开始,确实符合我们的设置。
但是:id是从3开始的,这与我们的设置并不一样,我们设置的为从4开始,怎么回事?怎么解决?
其实auto_increment在使用时,会对初始值与添加了auto_increment语法的列中的值进行比较,当 auto_increment的当前值(此处值是2)小于 添加了该语法的列的值时,auto_increment会拿当前值2 根据步长(2)递增,知道auto_increment的当前值大于添加了该语法的列(id)的值时,才会将最终的这个值作为初始插入数据的值。
auto_increment 在插入数据时,真正一开始可以插入表中的值得计算公式:
假设 a 为 表中id列的最大值, b为auto_increment的初始值,c 为步长,则auto_increment真正的初始值为:
auto_increment_real = int( a/b) * c + c ;
解决
研究了很久,翻看 MySQL 官网文档,都说,自增ID分别是 1、2、3 和 2 、 4 、 6 ,并没有对此情况做明确说明。
直到我看到 这位大神的回答。其实id的计算: INT(current_value / increment) x increment + offset
.
总结
总结一下:
- AUTO_INCREMENT 所在的列,必须为整数型数据列
- AUTO_INCREMENT 所在的列,不能为空
- AUTO_INCREMENT 所在的列,必须有唯一索引
- AUTO_INCREMENT 所在的列,值必须大于0
- AUTO_INCREMENT 所在的列,最大值,受其数据类型及是否为 无符号(Unsigned) 限制,若使用的为 TINYINT(4) 且 为无符号的,则最大值为 255,若继续插入数据,则该列的值保持最大值不变,
- AUTO_INCREMENT 所在的列,若向其中插入的值,大于所在表当前的 AUTO_INCREMENT 值,则会更新表 AUTO_INCREMENT 值至 current_max_value - (current_max_value - auto_increment_offset) % auto_increment_increment + auto_increment_increment ,即该列的下一个序列值