Alterar o valor da coluna do ID de incremento automático do mysql

Nov 20 2020

Eu tenho uma tabela mysql com uma gpid AUTO_INCREMENT NOT NULL UNIQUEcoluna.

Depois de preencher esta tabela (que tem mais de 50 milhões de entradas), percebi que o mysql ainda incrementa as AUTO_INCREMENTcolunas se a transação falhar devido a um IntegrityError, e isso é compreensível.

Os resultados são lacunas em AUTO_INCREMENTcolunas, com gpidvalores de salto (por exemple a partir gpid == 3de gpid == 5entre duas fileiras consecutivas). Embora isso não seja um problema para máquinas, é para meus colegas de trabalho e eu. O objetivo desta coluna era, entre outras coisas, representar o número exato de linhas na tabela.

Existe uma maneira de alterar todos os gpidvalores da coluna para um intervalo legal (de 1 a 53926669), respeitando a ordem em que as linhas foram inseridas na tabela, sem ter que descartar / recarregar a tabela? O reabastecimento levaria muito tempo.

Obrigado.

Respostas

GMB Nov 20 2020 at 13:29

O MySQL, assim como outros bancos de dados, não garante a ausência de lacunas na coluna de autoincremento. Renumerar a tabela pode corrigir o problema em um determinado momento, mas lacunas podem (e muito provavelmente) aparecerem no futuro.

Se você deseja uma sequência que aumenta monoticamente, o incremento automático não é o que você precisa. Em vez disso, você pode, por exemplo, criar uma visualização e usar row_number():

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