更改 mysql 自动递增 id 列值

Change mysql auto increment id column value

我有一个 mysql table 和一个 gpid AUTO_INCREMENT NOT NULL UNIQUE 列。

填充此 table(包含 50M+ 条目)后,我意识到如果交易因 IntegrityError 而失败,mysql 仍会增加​​ AUTO_INCREMENT 列,这是可以理解的。

结果是 AUTO_INCREMENT 列中的间隙,具有 gpid 跳跃值(例如,在两个连续行之间从 gpid == 3gpid == 5)。虽然这对机器来说不是问题,但对我和我的同事来说却是一个问题。除其他外,本专栏的目的是表示 table.

中的确切行数

有没有一种方法可以将所有 gpid 列的值更改为一个合适的范围(从 1 到 53926669),同时尊重行在 table 中的插入顺序,而不必 drop/refill table?充值会花很长时间。

谢谢。

MySQL和其他数据库一样,不保证自增列不留空隙。重新编号 table 可能会在特定时间点解决问题,但将来可能(而且很可能)会出现差距。

如果你想要一个单调递增的序列,那么自增不是你所需要的。相反,您可以创建一个视图,然后使用 row_number():

create view myview as
select t.*, row_number() over(order by gpid) as new_gpid
from mytable t