


Sollten Sie Lücken in automatisch inkrementierenden Feldern in Ihrer Datenbank schließen?
Nov 18, 2024 pm 10:59 PMLücken in Feldern mit automatischer Inkrementierung beheben: Eine detaillierte Erklärung
Felder mit automatischer Inkrementierung werden verwendet, um eindeutige Kennungen für Datensätze in einer Datenbank zu generieren Tisch. Aufgrund von Einfüge- und Löschvorgängen im Laufe der Zeit können jedoch Lücken in der Reihenfolge dieser Kennungen auftreten.
Die Bedeutungslosigkeit von Lücken
Das ist wichtig zu beachten dass Lücken in automatisch inkrementierenden Feldern normalerweise bedeutungslos sind. Sie dienen keinem logischen Zweck und sollten nicht zur Datenorganisation oder Referenzierung herangezogen werden. Der Hauptzweck von Feldern mit automatischer Inkrementierung besteht darin, eine eindeutige Referenz für jeden Datensatz bereitzustellen, und nicht darin, eine bestimmte Reihenfolge oder Reihenfolge beizubehalten.
Lücken schließen
Während Es mag intuitiv erscheinen, diese Lücken zu füllen, es wird jedoch aus mehreren Gründen im Allgemeinen nicht empfohlen:
- Lücken sind bedeutungslos und tun es auch nicht Auswirkungen auf die Integrität oder Verwendbarkeit der Daten haben.
- Der Versuch, die Lücken zu schließen, kann zu Fehlern oder Inkonsistenzen in der Datenbank führen.
Dennoch, wenn nötig...
Wenn Sie die Lücken unbedingt füllen müssen, ist dies in bestimmten Situationen möglich. Die folgenden Schritte bieten eine detaillierte Erklärung:
- Erstellen Sie eine temporäre Tabelle: Erstellen Sie eine temporäre Tabelle, um die vorhandenen IDs neuen sequentiellen IDs mithilfe einer Spalte mit automatischer Inkrementierung zuzuordnen.
- Alte IDs einfügen: Füllen Sie die temporäre Tabelle in aufsteigender Reihenfolge mit den alten IDs aus der Originaltabelle Reihenfolge.
- Fremdschlüsseleinschränkungen löschen: Deaktivieren Sie vorübergehend alle Fremdschlüsseleinschränkungen, die auf die alten IDs verweisen, um Datenbeschädigungen bei Aktualisierungen zu verhindern.
- Referenzen aktualisieren: Aktualisieren Sie alle Verweise auf die alten IDs in der Originaltabelle und den zugehörigen Tabellen mit den neuen IDs aus der temporären Tabelle Tabelle.
- Einschränkungen erneut aktivieren: Sobald alle Referenzen aktualisiert wurden, aktivieren Sie die Fremdschlüsseleinschränkungen erneut, um die referenzielle Integrität aufrechtzuerhalten.
- Temporäre Tabelle löschen : Bereinigen Sie Ressourcen, indem Sie die temporäre Tabelle löschen.
Ein Beispiel für Referenzen aktualisieren
Angenommen, Sie haben eine übergeordnete Tabelle und eine untergeordnete Tabelle mit dem folgenden Schema:
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) );
Um die Referenzen zu aktualisieren, führen Sie die folgenden Schritte aus:
-
Erstellen Sie eine temporäre Tabelle, die alte Eltern-IDs den neuen zuordnet IDs:
CREATE TEMPORARY TABLE NewIDs ( Id INT UNSIGNED AUTO_INCREMENT, ParentId INT UNSIGNED ); INSERT INTO NewIDs (ParentId) SELECT ParentId FROM Parent ORDER BY ParentId ASC;
Nach dem Login kopieren -
Fremdschlüsselprüfungen deaktivieren:
SET foreign_key_checks = 0;
Nach dem Login kopieren -
Übergeordnete und untergeordnete Tabellen mit neuen IDs aktualisieren:
UPDATE Parent, Child, NewIds SET Parent.ParentId = NewIds.Id, Child.ParentId = NewIds.Id WHERE Parent.ParentId = NewIds.ParentId AND Child.ParentId = NewIds.ParentId;
Nach dem Login kopieren -
Fremdschlüssel wieder aktivieren prüft:
SET foreign_key_checks = 1;
Nach dem Login kopieren -
Temporäre Tabelle löschen:
DROP TABLE NewIds;
Nach dem Login kopieren
Durch Befolgen dieser Schritte können Sie übergeordnete und untergeordnete Referenzen aktualisieren, um sie widerzuspiegeln die neuen, geordneten IDs, die in der temporären Tabelle generiert werden.
Das obige ist der detaillierte Inhalt vonSollten Sie Lücken in automatisch inkrementierenden Feldern in Ihrer Datenbank schließen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Reduzieren Sie die Verwendung des MySQL -Speichers im Docker

Wie verändern Sie eine Tabelle in MySQL mit der Änderungstabelleanweisung?

So lösen Sie das Problem der MySQL können die gemeinsame Bibliothek nicht öffnen

Führen Sie MySQL in Linux aus (mit/ohne Podman -Container mit Phpmyadmin)

Ausführen mehrerer MySQL-Versionen auf macOS: Eine Schritt-für-Schritt-Anleitung

Wie sichere ich mich MySQL gegen gemeinsame Schwachstellen (SQL-Injektion, Brute-Force-Angriffe)?

Was sind einige beliebte MySQL -GUI -Tools (z. B. MySQL Workbench, PhpMyAdmin)?
