Changer la valeur de la colonne d'ID d'incrémentation automatique mysql

Nov 20 2020

J'ai une table mysql avec une gpid AUTO_INCREMENT NOT NULL UNIQUEcolonne.

Après avoir rempli ce tableau (qui contient plus de 50 millions d'entrées), j'ai réalisé que mysql incrémente toujours les AUTO_INCREMENTcolonnes si la transaction échoue à cause d'une IntegrityError, et cela est compréhensible.

Les résultats sont des lacunes dans les AUTO_INCREMENTcolonnes, avec gpiddes valeurs sautantes (par exemple de gpid == 3à gpid == 5entre deux lignes consécutives). Bien que ce ne soit pas un problème pour les machines, c'est un problème pour mes collègues et moi. Le but de cette colonne était, entre autres, de représenter le nombre exact de lignes dans le tableau.

Existe-t-il un moyen de changer toutes les gpidvaleurs de colonne en une plage agréable (de 1 à 53926669), en respectant l'ordre dans lequel les lignes ont été insérées dans le tableau, sans avoir à supprimer / remplir le tableau? Le remplissage me prendrait beaucoup de temps.

Je vous remercie.

Réponses

GMB Nov 20 2020 at 13:29

MySQL, tout comme les autres bases de données, ne garantit pas l'absence de lacunes dans la colonne auto-incrémentée. La renumérotation du tableau peut résoudre le problème à un moment donné, mais des lacunes peuvent (et très probablement) apparaître à l'avenir.

Si vous souhaitez une séquence à croissance monotone, l'incrémentation automatique n'est pas ce dont vous avez besoin. Au lieu de cela, vous pouvez par exemple créer une vue et utiliser row_number():

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