TIM*_*MEX 6 mysql database auto-increment
我有1亿行,而且它太大了.我看到很多差距.(因为我删除,添加,删除,添加.)
我想用自动增量填补这些空白.如果我重置它..有任何harM吗?
如果我这样做,它会填补空白吗?:
mysql> ALTER TABLE tbl AUTO_INCREMENT = 1;
Run Code Online (Sandbox Code Playgroud)
可能非常危险,因为您可以再次获得已经在使用中的数字.
你建议重新将序列重置为1.它只会产生1,2,3,4,5,6,7,......等等,无论这些数字是否存在差距.
更新:根据Martin的回答,由于涉及的危险,MySQL甚至不会让你这样做.它会将计数器重置为至少当前值+ 1.
再想一想间隙存在导致的真正问题.通常它只是一个美学问题.
如果数字太大,请切换到更大的数据类型(bigint应该足够多).
FWIW ...根据MySQL文档申请
ALTER TABLE tbl AUTO_INCREMENT = 1
Run Code Online (Sandbox Code Playgroud)
其中tbl
包含了现有的数据应该没有任何效果:
要更改要用于新行的AUTO_INCREMENT计数器的值,请执行以下操作:
ALTER TABLE t2 AUTO_INCREMENT = value;
您不能将计数器重置为小于或等于任何已使用的值.对于MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则该值将重置为当前最大值加1.对于InnoDB,如果该值小于列中的当前最大值,则不会发生错误,并且不会更改当前序列值.
我运行了一个小测试,确认了MyISAM表.
所以你问题的答案是:没有伤害,也不会填补空白.正如其他响应者所说:数据类型的变化看起来是最不痛苦的选择.