更改 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 == 3
到 gpid == 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
我有一个 mysql table 和一个 gpid AUTO_INCREMENT NOT NULL UNIQUE
列。
填充此 table(包含 50M+ 条目)后,我意识到如果交易因 IntegrityError 而失败,mysql 仍会增加 AUTO_INCREMENT
列,这是可以理解的。
结果是 AUTO_INCREMENT
列中的间隙,具有 gpid
跳跃值(例如,在两个连续行之间从 gpid == 3
到 gpid == 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