Heim > Datenbank > MySQL-Tutorial > Können Sie die Lücken bei den Auto-Inkrement-IDs in Ihrer Datenbank schließen?

Können Sie die Lücken bei den Auto-Inkrement-IDs in Ihrer Datenbank schließen?

DDD
Freigeben: 2024-11-12 05:51:02
Original
717 Leute haben es durchsucht

Can you fill the gaps in auto-increment IDs in your database?

Sicherstellung aufeinanderfolgender Auto-Inkrement-IDs

Bei der Datenbankverwaltung bieten Auto-Inkrementfelder eine bequeme Möglichkeit, eindeutige Kennungen für jeden Datensatz zu generieren. Bestimmte Vorgänge wie Einfügungen und Löschungen können jedoch „Lücken“ oder Lücken in der Reihenfolge dieser IDs erzeugen.

Eine häufige Frage unter Datenbankbenutzern ist, ob es möglich ist, diese Lücken zu schließen. Die Antwort liegt im Verständnis des Zwecks von Feldern mit automatischer Inkrementierung.

Felder mit automatischer Inkrementierung werden in erster Linie zur Identifizierung von Datensätzen und nicht als Indikatoren für die Datensatzreihenfolge verwendet. Daher ist es im Allgemeinen nicht erforderlich, eine fortlaufende Folge von IDs zu haben. Lücken haben keinen Einfluss auf die Integrität oder Funktionalität der Tabelle.

Für bestimmte Fälle, in denen die Beibehaltung der fortlaufenden Nummerierung von entscheidender Bedeutung ist, gibt es jedoch eine Methode, die angewendet werden kann:

Verwendung von Temporär Tabellen zum Erstellen neuer IDs

Wenn Sie MySQL 3.23 oder höher verwenden, können Sie eine temporäre Tabelle verwenden, um einen neuen Satz sequenzieller IDs zu erstellen. Dazu gehört das Erstellen einer temporären Tabelle mit zwei Spalten: eine für die neue ID (NewID) und eine für die alte ID (OldID).

Mit dem folgenden Code kann die temporäre Tabelle erstellt und mit der gefüllt werden vorhandene IDs:

CREATE TEMPORARY TABLE NewIDs (
    NewID INT UNSIGNED AUTO INCREMENT,
    OldID INT UNSIGNED
);

INSERT INTO NewIDs (OldID)
SELECT
    Id
FROM
    OldTable
ORDER BY
    Id ASC;
Nach dem Login kopieren

Dadurch wird eine Tabelle erstellt, in der jede Zeile eine vorhandene ID mit einer neuen, sequentiellen ID paart. Der nächste Schritt besteht darin, die tatsächliche Tabelle mit diesen neuen IDs zu aktualisieren.

Aktualisieren der tatsächlichen Tabelle und der Fremdschlüsselreferenzen

Um die Tabelle zu aktualisieren, müssen Sie Folgendes tun Aktualisieren Sie sowohl das Feld für die automatische Inkrementierung als auch alle Fremdschlüsselverweise, die dieses Feld verwenden. Dies kann das vorübergehende Deaktivieren von Fremdschlüsseleinschränkungen und deren erneute Aktivierung nach dem Update umfassen.

Beispiel

Betrachten Sie zwei Tabellen, Parent und Child, mit den folgenden Schemata:

CREATE TABLE Parent (
    ParentId INT UNSIGNED AUTO INCREMENT,
    Value INT UNSIGNED,
    PRIMARY KEY (ParentId)
);

CREATE TABLE Child (
    ChildId INT UNSIGNED AUTO INCREMENT,
    ParentId INT UNSIGNED,
    PRIMARY KEY (ChildId),
    FOREIGN KEY (ParentId) REFERENCES Parent (ParentId)
);
Nach dem Login kopieren

Um die übergeordneten und untergeordneten Tabellen mit den neuen IDs aus der temporären Tabelle zu aktualisieren, können Sie die folgende SQL-Anweisung verwenden:

SET foreign_key_checks = 0;

UPDATE
    Parent,
    Child,
    NewIds
SET
    Parent.ParentId = NewIds.Id,
    Child.ParentId = NewIds.Id
WHERE
    Parent.ParentId = NewIds.ParentId AND
    Child.ParentId = NewIds.ParentId;

SET foreign_key_checks = 1;

DROP TABLE NewIds;
Nach dem Login kopieren

Hinweis:

Es ist wichtig zu verstehen, dass das Füllen dieser Löcher keinen funktionellen Nutzen bringt. Felder mit automatischer Inkrementierung dienen dazu, eine eindeutige Datensatzidentifizierung sicherzustellen, und nicht, um eine sequentielle Reihenfolge aufrechtzuerhalten.

Das obige ist der detaillierte Inhalt vonKönnen Sie die Lücken bei den Auto-Inkrement-IDs in Ihrer Datenbank schließen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage