Ändern Sie den Spaltenwert der automatischen MySQL-Inkrement-ID
Ich habe eine MySQL-Tabelle mit einer gpid AUTO_INCREMENT NOT NULL UNIQUE
Spalte.
Nach dem Ausfüllen dieser Tabelle (mit mehr als 50 Millionen Einträgen) habe ich festgestellt, dass MySQL die AUTO_INCREMENT
Spalten immer noch inkrementiert , wenn die Transaktion aufgrund eines IntegrityError fehlschlägt, und das verständlicherweise.
Das Ergebnis sind Lücken in AUTO_INCREMENT
Spalten mit gpid
springenden Werten (zum Beispiel von gpid == 3
bis gpid == 5
zwischen zwei aufeinanderfolgenden Zeilen). Während dies kein Problem für Maschinen ist, ist es eines für meine Mitarbeiter und mich. Der Zweck dieser Spalte bestand unter anderem darin, die genaue Anzahl der Zeilen in der Tabelle darzustellen.
Gibt es eine Möglichkeit, alle gpid
Spaltenwerte in einen schönen Bereich (von 1 bis 53926669) zu ändern, wobei die Reihenfolge berücksichtigt wird, in der die Zeilen in die Tabelle eingefügt wurden, ohne die Tabelle löschen / neu füllen zu müssen? Das Nachfüllen würde lange dauern.
Vielen Dank.
Antworten
MySQL garantiert, genau wie andere Datenbanken, nicht das Fehlen von Lücken in der Spalte für die automatische Inkrementierung. Durch die Neunummerierung der Tabelle wird das Problem möglicherweise zu einem bestimmten Zeitpunkt behoben, es können jedoch (und höchstwahrscheinlich) in Zukunft Lücken auftreten.
Wenn Sie eine monotisch ansteigende Sequenz wünschen, ist die automatische Inkrementierung nicht das, was Sie benötigen. Stattdessen können Sie beispielsweise eine Ansicht erstellen und Folgendes verwenden row_number()
:
create view myview as
select t.*, row_number() over(order by gpid) as new_gpid
from mytable t