Mechanizm auto_increment jest wymagany do wygenerowania unikalnego wartości, które są większe niż jakakolwiek wartość wygenerowana wcześniej. Nie gwarantuje to wygenerowania kolejnego wartości.
Tu jest trochę dyskusji na ten temat:https://bugs.mysql.com/bug. php?id=57643
Wierne generowanie kolejnych wartości ma niewielkie znaczenie, ponieważ każda wartość może zostać „utracona” z innych powodów:
- Wstawianie nie powiedzie się, na przykład z powodu naruszenia ograniczenia, takiego jak UNIQUE KEY lub FOREIGN KEY.
- Wycofujesz transakcję dla INSERT.
- Udało Ci się i zatwierdzenie, ale później wiersz zostaje USUNIĘTY przez Ciebie lub inną sesję.
Wartości Auto-inc nie są zwracane do żadnej kolejki, ponieważ inne współbieżne sesje mogły w międzyczasie wygenerować dalsze wartości identyfikatorów. Nie warto utrzymywać przez InnoDB puli nieprzydzielonych wartości identyfikatorów, ponieważ ta pula może stać się ogromna i marnotrawna.
Może być również właściwe „zgubienie” wartości identyfikatora, w przeciwnym razie ktoś pomyśli, że wiersz, który miał na celu USUNIĘCIE, w jakiś sposób powrócił.