Alterar o valor da coluna do ID de incremento automático do mysql
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
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