Der auto_increment-Mechanismus ist erforderlich, um eindeutig zu generieren Werte, die größer sind als alle zuvor generierten Werte. Es garantiert nicht, dass konsekutiv generiert wird Werte.
Hier gibt es einige Diskussionen darüber:https://bugs.mysql.com/bug. php?id=57643
Es ist wenig wichtig, aufeinanderfolgende Werte originalgetreu zu erzeugen, da jeder Wert aus anderen Gründen "verloren" gehen könnte:
- Ihr INSERT schlägt fehl, zum Beispiel weil Sie gegen eine Einschränkung wie UNIQUE KEY oder FOREIGN KEY verstoßen.
- Sie machen die Transaktion für Ihre INSERT rückgängig.
- Sie sind erfolgreich und übernehmen, aber später wird die Zeile von Ihnen oder einer anderen Sitzung gelöscht.
Autoinc-Werte werden in keine Warteschlange zurückgegeben, da andere gleichzeitige Sitzungen in der Zwischenzeit möglicherweise weitere ID-Werte generiert haben. Es lohnt sich nicht, InnoDB einen Pool nicht zugeordneter ID-Werte zu unterhalten, da dieser Pool riesig und verschwenderisch werden könnte.
Außerdem könnte es angebracht sein, einen ID-Wert zu "verlieren", sonst würde jemand denken, dass die Zeile, die er löschen wollte, irgendwie zurückgekommen ist.