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

So verhindern Sie Event-Bubbling in JavaScript

Wir müssen darauf achten, dass die Eigenschaften ...

Layui implementiert Beispielcode für Abfragen mit mehreren Bedingungen

Ich habe vor kurzem ein Dateisystem erstellt und ...

Lösen Sie den Konflikt zwischen Docker und VMware

1. Docker-Startproblem: Problem gelöst: Sie müsse...

Javascript-Countdown-Eingabeaufforderungsfeld

In diesem Artikelbeispiel wird der spezifische Ja...

W3C Tutorial (10): W3C XQuery Aktivitäten

XQuery ist eine Sprache zum Extrahieren von Daten...

So installieren Sie RabbitMQ schnell in Docker

1. Holen Sie sich das Bild #Geben Sie die Version...

Die benutzerdefinierte Vue-Komponente implementiert eine bidirektionale Bindung

Szenario: Die von uns häufig verwendeten Interakt...

Eine kurze Diskussion zum Implementierungsprinzip des Vue-Slots

Inhaltsverzeichnis 1. Beispielcode 2. Sehen Sie d...

HTML-Grundlagen_Allgemeine Tags, allgemeine Tags und Tabellen

Teil 1 HTML <html> – Start-Tag <Kopf>...

CSS-Pseudoklasse: empty makes me shine (Beispielcode)

Jeder, der meine Artikel in letzter Zeit gelesen ...

Vue3 kapselt seine eigene Paging-Komponente

In diesem Artikelbeispiel wird der spezifische Co...