Lösung für das Ausgehen der Auto-Increment-ID (Primärschlüssel) von MySQL

Lösung für das Ausgehen der Auto-Increment-ID (Primärschlüssel) von MySQL

In MySQL werden viele Typen von Auto-Increment-IDs verwendet und für jede Auto-Increment-ID ist ein Anfangswert festgelegt. Im Allgemeinen beginnt der Anfangswert bei 0 und erhöht sich dann in einer bestimmten Schrittweite (normalerweise um 1). Im Allgemeinen verwenden wir int(11) als Autoinkrement-ID einer Datentabelle. In MySQL gibt es eine Obergrenze, solange die Bytelänge dieser Nummer definiert ist.

Was soll ich tun, wenn die Auto-Increment-ID (Primärschlüssel) von MySQL aufgebraucht ist?

Wenn wir int unsigned (int, 4 Bytes) verwenden, können wir die maximal aktuell deklarierte Auto-Increment-ID berechnen. Da hier int unsigned definiert ist, kann der Maximalwert 2 hoch 32 - 1 = 4294967295 erreichen.

Hier ist ein kleiner Trick. Beim Erstellen einer Tabelle können Sie den Anfangswert von AUTO_INCREMENT direkt als 4294967295 deklarieren.

Tabelle `test` erstellen (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 PRIMÄRSCHLÜSSEL (`id`)
)ENGINE=InnoDB AUTO_INCREMENT=4294967295;

SQL-Insert-Anweisung

in „Test“-Werte einfügen (null);

Als ich versuchte, ein weiteres Datenelement einzufügen, erhielt ich das folgende abnormale Ergebnis.

[SQL] in „Test“-Werte einfügen (null);
[Err] 1062 - Doppelter Eintrag „4294967295“ für Schlüssel „PRIMARY“

Dies bedeutet, dass beim erneuten Einfügen der Daten die verwendete Auto-Increment-ID immer noch 4294967295 ist und ein Primärschlüsselkonfliktfehler gemeldet wird. Dies bedeutet, dass sich der ID-Wert nicht mehr ändert, nachdem er die Obergrenze erreicht hat. 4294967295, diese Zahl kann die meisten Szenarien bewältigen. Wenn Ihr Dienst häufig Daten einfügt und löscht, besteht immer noch das Risiko, dass die Zahl ausgeht. Es wird empfohlen, bigint unsigned zu verwenden, was eine große Zahl ist.

bigint unsigned ist ein Integer-Datenwert (alle Zahlen) im Bereich von -2^63 (-9223372036854775808) bis 2^63-1 (9223372036854775807), und seine Speichergröße beträgt 8 Bytes.

Es gibt jedoch eine andere Situation. Was passiert, wenn der Primärschlüssel beim Erstellen einer Tabelle nicht explizit deklariert wird?

In diesem Fall erstellt InnoDB automatisch eine unsichtbare 6-Byte-Zeilen-ID für Sie und verwaltet eine globale dictsys.row_id, sodass Tabellen ohne definierten Primärschlüssel die Zeilen-ID gemeinsam nutzen. Bei jedem Einfügen eines Datenelements wird die globale Zeilen-ID als Primärschlüssel-ID verwendet und dann wird die globale Zeilen-ID um 1 erhöht.

Die globale Zeilen-ID wird mit dem vorzeichenlosen Typ bigint implementiert, aber tatsächlich sind nur 6 Bytes für die Zeilen-ID reserviert. Bei diesem Entwurf tritt ein Problem auf: Wenn die globale Zeilen-ID weiter ansteigt, bis sie 2 hoch 48 - 1 erreicht, und dann um 1 ansteigt, sind die unteren 48 Bits der Zeilen-ID alle 0. Wenn daher eine neue Datenzeile eingefügt wird, ist die erhaltene Zeilen-ID 0 und es besteht die Möglichkeit eines Primärschlüsselkonflikts.

Um diese versteckte Gefahr zu vermeiden, muss jede Tabelle über einen Primärschlüssel verfügen.

Zusammenfassen

Nachdem die Auto-Increment-ID der Datenbanktabelle die Obergrenze erreicht hat, ändert sich ihr Wert bei erneuter Anwendung nicht mehr. Das weitere Einfügen von Daten führt zu einem Primärschlüsselkonfliktfehler. Versuchen Sie daher beim Entwerfen einer Datentabelle, basierend auf den Geschäftsanforderungen den geeigneten Feldtyp auszuwählen.

Oben finden Sie den detaillierten Inhalt der Lösung für das Problem, dass die Autoinkrement-ID (Primärschlüssel) von MySQL aufgebraucht ist. Weitere Informationen zur Autoinkrement-ID (Primärschlüssel) von MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So ändern Sie den Startwert der MySQL-Auto-Increment-ID
  • So setzen Sie die MySQL-Auto-Increment-ID auf 0 zurück
  • Lösung für das Problem der Selbstinkrement-ID in der MySQL-Tabelle
  • Fehlerbehebung und Lösungen für das Problem der MySQL-Autoinkrement-ID-Übergröße
  • Was Sie über die automatische ID-Inkrementierung in MySQL wissen müssen
  • Beispiel für die Erschöpfung der MySQL-Auto-Increment-ID
  • Zusammenfassung einiger kleinerer Probleme mit der MySQL-Autoinkrement-ID
  • Was tun, wenn die selbstinkrementierende MySQL-ID ausgeht?

<<:  Verschiedene Implementierungsmethoden von Vue zum Ändern von übergeordneten Komponenteneigenschaften durch untergeordnete Komponenten

>>:  So erstellen Sie ein Tomcat-Image basierend auf Dockerfile

Artikel empfehlen

Methode zur Optimierung von MySQL-Gruppenabfragen

MySQL behandelt GROUP BY- und DISTINCT-Abfragen i...

Details zur zugrundeliegenden Datenstruktur von MySQL-Indizes

Inhaltsverzeichnis 1. Indextyp 1. B+ Baum 2. Was ...

Warum kann mein Tomcat nicht starten?

Inhaltsverzeichnis Phänomen: Portnutzung: Rechtsc...

Zusammenfassung der Verwendung von Datetime und Timestamp in MySQL

Inhaltsverzeichnis 1. Wie wird die aktuelle Uhrze...

Grundlegendes Handbuch für Webdesign 216 Websichere Farben

Die Farbdarstellung auf einer Webseite wird von ve...

Angular Cookie Lese- und Schreibvorgangscode

Lese- und Schreibvorgänge bei Angular Cookies, de...

Verstehen Sie die anfängliche Verwendung von Redux in React in einem Artikel

Redux ist ein Plug-In zur Datenstatusverwaltung. ...

Befehl zum Entfernen (Löschen) eines symbolischen Links in Linux

Möglicherweise müssen Sie in Linux manchmal symbo...

So stellen Sie das umfassende Benutzererlebnis sicher

Verwandte Artikel: Website-Design für Benutzererfa...

Welche Regeln gelten für den Kontext in JavaScript-Funktionen?

Inhaltsverzeichnis 1. Regel 1: Objekt.Methode() 1...

Grafisches Tutorial zur Installation von MySQL 5.6.35 unter Windows 10 64-Bit

1. Laden Sie MySQL Community Server 5.6.35 herunt...