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

MariaDB - INNODB überspringt die Zahlenfolge beim Erstellen inkrementeller Datensätze - warum?

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.