Zusammenfassung einiger kleinerer Probleme mit der MySQL-Autoinkrement-ID

Zusammenfassung einiger kleinerer Probleme mit der MySQL-Autoinkrement-ID

Die folgenden Fragen basieren alle auf der InnoDB-Speicher-Engine.

1. Wie lautet die ID des neu eingefügten Datensatzes, nachdem der Datensatz mit der größten ID gelöscht wurde?

Wenn beispielsweise in der aktuellen Tabelle drei Datensätze mit den IDs 1, 2 und 3 vorhanden sind und 3 gelöscht wird, wo beginnen dann die IDs der neu eingefügten Datensätze?

Antwort: Beginnen Sie bei 4.

Experiment

Tabelle tb0 mit automatischer Inkrement-ID erstellen:

Tabelle tb0 erstellen (ID int unsigned auto_increment Primärschlüssel);

Fügen Sie 3 Datensätze ein:

in tb0-Werte (null) einfügen;

Löschen Sie den Datensatz mit der ID 3:

Löschen aus tb0, wo ID=3

Zeigen Sie den aktuellen Auto-Increment-Wert an:

zeige, erstelle Tabelle tb0;

# ErgebnisCREATE TABLE `tb0` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

Die Auto-Increment-ID ist 4 und das Löschen des Datensatzes mit der größten ID hat keine Auswirkungen auf den Wert der Auto-Increment-ID.

2. Wo beginnt die automatische ID-Inkrementierung nach dem Neustart von MySQL?

Wenn beispielsweise die aktuelle Tabelle drei Datensätze mit den IDs 1, 2 und 3 enthält, löschen Sie 3 und starten Sie MySQL neu. Wo beginnen die IDs der neu eingefügten Datensätze?

Viele Leute denken, es beginnt bei 4, aber tatsächlich beginnt es bei 3.

Weil der Auto-Inkrement-Wert von InnoDB im Speicher und nicht in der Datendatei aufgezeichnet wird.

Nach dem Neustart wird die aktuelle maximale ID + 1 als Startwert verwendet.

Experiment

Tabelle tb1 mit automatischer Inkrement-ID erstellen:

Erstellen Sie Tabelle tb1 (ID int unsigned auto_increment Primärschlüssel);

3 Datensätze hinzufügen:

in tb1-Werte (null) einfügen;

Löschen Sie den Datensatz mit der ID 3:

Löschen aus tb1, wo ID=3

Aus der vorherigen Frage wissen wir, dass der Auto-Increment-ID-Wert derzeit 4 ist.

Starten Sie MySQL neu.

Zeigen Sie den aktuellen Auto-Increment-Wert an:

zeige „Tabelle erstellen tb1“;

# ErgebnisCREATE TABLE `tb1` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1

3. Wie hoch ist der Auto-Inkrement-Wert, wenn Sie die ID das nächste Mal manuell eingeben?

Wenn beispielsweise die aktuelle Auto-Increment-ID 4 ist und Sie beim Einfügen eines neuen Datensatzes die ID manuell als 10 angeben, lautet die ID beim nächsten Einfügen mit der Auto-Increment-Methode 11.

ID-Autoinkrement = aktuelle maximale ID + 1

Beim Einfügen eines neuen Datensatzes wird der neue ID-Wert berechnet

Experiment

Tabelle tb2 mit automatischer ID-Inkrementierung erstellen:

Tabelle tb2 erstellen (ID int unsigned auto_increment Primärschlüssel);

Einen Datensatz hinzufügen:

in TB2-Werte (null) einfügen;

Geben Sie die ID manuell an:

in tb2-Werte (4294967000) einfügen;

Zeigen Sie den aktuellen Auto-Increment-Wert an:

zeige „Tabelle erstellen tb2“;

# ErgebnisCREATE TABLE `tb2` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4294967001 DEFAULT CHARSET=latin1

Sie können sehen, dass der Auto-Inkrement-Wert 4294967001 wird.

4. Was tun, wenn der selbst geschaffene Wert aufgebraucht ist?

Der Maximalwert eines vorzeichenlosen int beträgt 4294967295. Wenn die automatische Inkrementierung diesen Wert erreicht, wird er nicht mehr geändert und beim Einfügen eines neuen Datensatzes wird ein Fehler gemeldet:

Doppelter Eintrag „4294967295“ für Schlüssel „PRIMARY“

Wenn Tabellendatensätze häufig eingefügt und gelöscht werden, können IDs schnell aufgebraucht sein, auch wenn die Gesamtzahl der Datensätze in der Tabelle nicht groß ist. In diesem Fall kann bigint erforderlich sein.

int-Wertebereich:

int ist 4 Bytes lang, die erste Ziffer wird verwendet, um das Vorzeichen anzuzeigen

Vorzeichenbehafteter Bereich:
Von - Bis - 1

(-2147483648 bis 2147483647)

Vorzeichenloser Bereich:
0 bis -1

(0 bis 4294967295)

Bigint-Wertebereich:

int ist 8 Bytes

Vorzeichenbehafteter Bereich:
Von - Bis - 1

(-9223372036854775808 bis 9223372036854775807)

Vorzeichenloser Bereich:
0 bis -1

(0 bis 18446744073709551615)

Zusammenfassung

Durch Experimente können wir einige Merkmale der selbstinkrementierenden ID in InnoDB herausfinden:

Beim Einfügen eines neuen Datensatzes wird ein neuer Auto-Increment-Wert (maximale ID + 1) berechnet, unabhängig davon, ob die automatische ID verwendet oder eine ID manuell angegeben wird.

Das Löschen des maximalen ID-Werts hat keine Auswirkungen auf den Auto-Increment-ID-Wert, wird aber nach einem Neustart von MySQL Auswirkungen haben. Der vorherige Auto-Increment-ID-Wert wird nicht verwendet, sondern die maximale ID+1. Dies liegt daran, dass der Auto-Increment-ID-Wert im Speicher gespeichert ist und nach einem Neustart neu berechnet werden muss.

Die Auto-Increment-ID ändert sich nicht, nachdem sie aufgebraucht ist.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 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
  • Lösung für das Ausgehen der Auto-Increment-ID (Primärschlüssel) von MySQL
  • Beispiel für die Erschöpfung der MySQL-Auto-Increment-ID
  • Was tun, wenn die selbstinkrementierende MySQL-ID ausgeht?

<<:  Vue+Swiper realisiert Timeline-Effekt

>>:  Hinweise zu Linux-Systembefehlen

Artikel empfehlen

Die Organisation W3C gibt Stilempfehlungen für HTML4

Dies ist die Stilempfehlung der W3C-Organisation f...

Beispielcode zur Implementierung eines Radardiagramms mit vue+antv

1. Abhängigkeit herunterladen npm installiere @an...

Docker-Image-Analysetool - Analyse des Tauchprinzips

Heute empfehle ich ein solches Open-Source-Tool z...

Das Bildelement img hat in IE6 zusätzlichen Leerraum

Beim Erstellen eines DIV+CSS-Layouts einer Seite ...

Nginx-Beispielcode zur Implementierung dynamischer und statischer Trennung

In Kombination mit dem Szenario in diesem Artikel...

Detaillierte Erklärung gängiger Docker Compose-Befehle

1. Die Verwendung von Docker Compose ist der Verw...

Der vollständige Leitfaden zum Rasterlayout in CSS

Grid ist ein zweidimensionales Rasterlayoutsystem...

Über die Kontrolle und Verschönerung von Eingabedateien

Beim Hochladen auf einigen Websites wird nach dem...

Detaillierte Erklärung der Meta-Tags und ihrer Verwendung in HTML

Ich werde keine weitere Zeit mit Unsinnsgerede ve...

js und jquery, um einen Tab-Statusleisten-Umschalteffekt zu erzielen

Heute werden wir einen einfachen Fall durchgehen ...

Erfahren Sie, wie Sie ein Vue-Projekt mit Docker bereitstellen

1.Schreiben Sie davor: Als leichtgewichtige Virtu...

Ausführliche Erläuterung zum MySQL-Lernen einer Datenbanksicherung

Inhaltsverzeichnis 1.DB, DBMS, SQL 2. Eigenschaft...