我有一个包含gpid AUTO_INCREMENT NOT NULL UNIQUE列的mysql表。
填充这个表(其中包含50M+条目)后,我意识到如果事务由于IntegrityError而失败,mysql仍然会递增AUTO_INCREMENT列,这是可以理解的。
结果是AUTO_INCREMENT列中的间隙,以及gpid跳跃值(例如,在两个连续的行之间从gpid == 3到gpid == 5 )。虽然这不是机器的问题,但这是我和我的同事的问题。本列的目的之一是表示表中的确切行数。
有没有一种方法可以将所有gpid列值更改为合适的范围(从1到53926669),而不需要删除/重新填充表中的行的顺序?加满水要花我很长时间。
谢谢。
发布于 2020-11-20 21:29:13
与其他数据库一样,MySQL不能保证自动增量列中没有间隙。对表重新编号可能会在特定的时间点修复问题,但是将来可能(并且很有可能)会出现差距。
如果你想要一个一元递增的序列,那么自动递增并不是你所需要的。例如,您可以创建一个视图,并使用row_number()
create view myview as
select t.*, row_number() over(order by gpid) as new_gpid
from mytable thttps://stackoverflow.com/questions/64930233
复制相似问题