MySQL:无需重建表能否扩大auto_increment列的最大值?
MySQL自增字段类型升级后自增指针调整方案
首先纠正一个误区:show table status里的AUTO_INCREMENT字段,显示的是下一条插入记录会使用的ID值,不是字段的最大值。你把字段从int改成bigint unsigned后,字段本身的最大值已经自动变成18446744073709551615了,只是当前的自增指针还停留在原来int类型的上限附近,导致无法继续插入新记录。
不需要重建表,直接按以下操作解决:
手动调整自增指针
执行ALTER TABLE语句,将自增指针设置为大于当前值的一个数(比如比原来的2147483655大1):ALTER TABLE 你的表名 AUTO_INCREMENT = 2147483656;注意:这个值必须大于表中当前最大的ID值,否则MySQL会自动将其重置为最大ID+1。
验证调整结果
执行以下命令查看自增指针是否更新:SHOW TABLE STATUS LIKE '你的表名'\G输出中
AUTO_INCREMENT字段应该显示为你设置的数值。此时插入新记录,MySQL会继续从这个值开始递增,不会再触发Failed to read auto-increment value from storage engine报错。关于移除再添加自增属性无效的原因
你之前尝试移除并重新添加auto_increment属性没用,是因为MySQL在重新添加该属性时,会自动将自增指针设置为表中当前最大ID+1,而你的表中最大ID刚好卡在int类型的上限附近,所以指针不会自动跨越到更大的范围。
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

