InnoDB
ist eine Transaktionsmaschine.
Das bedeutet im folgenden Szenario:
Session A
fügt Datensatz1
einSession B
fügt Datensatz2
einSession 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).