Lücken in automatisch inkrementierenden Feldern füllen
Frage: Gibt es eine Möglichkeit, Lücken in automatisch inkrementierten Feldern nahtlos zu füllen? Felder mit neuen Einfügungen inkrementieren?
Antwort:
Während es im Allgemeinen nicht ratsam ist, sich für die Reihenfolge oder semantische Bedeutung auf Felder mit automatischer Inkrementierung zu verlassen, gibt es beim Ausfüllen Situationen Diese Lücken können wünschenswert sein. In solchen Fällen kann eine MySQL-Funktion verwendet werden, um einen neuen Satz sequenzieller IDs zu erstellen.
Erstellen Sie eine temporäre Tabelle mit CREATE TEMPORARY TABLE NewIDs (NewID INT UNSIGNED AUTO INCREMENT, OldID INT UNSIGNED) und fügen Sie alle vorhandenen IDs ein in aufsteigender Reihenfolge:
INSERT INTO NewIDs (OldID) SELECT Id FROM OldTable ORDER BY Id ASC
Dadurch wird eine Zuordnung zwischen alten und neuen IDs erstellt.
Um die Referenzen in anderen Tabellen zu aktualisieren, deaktivieren Sie Fremdschlüsseleinschränkungen:
SET foreign_key_checks = 0;
Aktualisieren Sie dann die übergeordneten und untergeordneten Tabellen:
UPDATE Parent, Child, NewIds SET Parent.ParentId = NewIds.Id, Child.ParentId = NewIds.Id WHERE Parent.ParentId = NewIds.ParentId AND Child.ParentId = NewIds.ParentId
Aktivieren Sie abschließend die Fremdschlüsselprüfungen erneut:
SET foreign_key_checks = 1;
Löschen Sie die temporäre Tabelle zur Bereinigung:
DROP TABLE NewIds
Es ist wichtig zu beachten, dass dieser Prozess mit Vorsicht angewendet werden sollte, da das Ändern von Feldern für die automatische Inkrementierung Auswirkungen auf die referenzielle Integrität und Leistung haben kann.
Das obige ist der detaillierte Inhalt vonKann ich Lücken in automatisch inkrementierenden Feldern in MySQL füllen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!