Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum erhöht sich das automatische Inkrement von MySQL bei fehlgeschlagenen Einfügungen?

InnoDB ist eine Transaktionsmaschine.

Das bedeutet im folgenden Szenario:

  1. Session A fügt Datensatz 1 ein
  2. Session B fügt Datensatz 2 ein
  3. Session A rollt zurück

, besteht entweder die Möglichkeit einer Lücke oder session B würde bis zur session A sperren festgeschrieben oder zurückgesetzt.

InnoDB Designer (wie die meisten anderen Entwickler von Transaktions-Engines) entschieden sich dafür, Lücken zuzulassen.

Aus der Dokumentation :

Beim Zugriff auf den Auto-Increment-Zähler InnoDB verwendet einen speziellen AUTO-INC auf Tabellenebene Sperre, die bis zum Ende des aktuellen SQL beibehalten wird Anweisung, nicht bis zum Ende der Transaktion. Die spezielle Lock-Release-Strategie wurde eingeführt, um die Parallelität für Einfügungen in eine Tabelle zu verbessern, die einen AUTO_INCREMENT enthält Spalte

InnoDB verwendet den speicherinternen Auto-Increment-Zähler, solange der Server läuft. Wenn der Server gestoppt und neu gestartet wird, wird InnoDB initialisiert den Zähler für jede Tabelle beim ersten INSERT neu in die Tabelle, wie zuvor beschrieben.

Wenn Sie Angst vor der id haben Spalte umbrechen, machen Sie sie zu BIGINT (8 Byte lang).