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 erstellen Sie ein Tomcat-Image basierend auf Dockerfile
Inhaltsverzeichnis Einige grundlegende Konfigurat...
Inhaltsverzeichnis MySql8.0 Fehler bei der Transa...
MySQL behandelt GROUP BY- und DISTINCT-Abfragen i...
Inhaltsverzeichnis 1. Indextyp 1. B+ Baum 2. Was ...
Inhaltsverzeichnis Phänomen: Portnutzung: Rechtsc...
Inhaltsverzeichnis 1. Wie wird die aktuelle Uhrze...
Die Farbdarstellung auf einer Webseite wird von ve...
Lese- und Schreibvorgänge bei Angular Cookies, de...
Redux ist ein Plug-In zur Datenstatusverwaltung. ...
Möglicherweise müssen Sie in Linux manchmal symbo...
Inhaltsverzeichnis 1. Umweltinstallation 2. Erste...
Verwandte Artikel: Website-Design für Benutzererfa...
Problembeschreibung Im aktuellen Hintergrunddiens...
Inhaltsverzeichnis 1. Regel 1: Objekt.Methode() 1...
1. Laden Sie MySQL Community Server 5.6.35 herunt...