Il meccanismo auto_increment è necessario per generare unico valori, che sono maggiori di qualsiasi valore che ha generato in precedenza. Non garantisce la generazione consecutiva valori.
Se ne discute qui:https://bugs.mysql.com/bug. php?id=57643
C'è poca importanza nel generare fedelmente valori consecutivi, perché qualsiasi valore potrebbe essere "perso" per altri motivi:
- Il tuo INSERT fallisce, ad esempio a causa della violazione di un vincolo come CHIAVE UNICA o CHIAVE ESTERA.
- Annulla la transazione per il tuo INSERT.
- Ci riesci e ti impegni, ma in seguito la riga viene CANCELLATA da te o da un'altra sessione.
I valori di inclusione automatica non vengono restituiti a nessun tipo di coda, perché altre sessioni simultanee potrebbero aver generato nel frattempo ulteriori valori id. Non vale la pena InnoDB mantenere un pool di valori ID non allocati, perché quel pool potrebbe diventare enorme e dispendioso.
Inoltre, potrebbe essere appropriato "perdere" un valore ID, altrimenti qualcuno potrebbe pensare che la riga che intendeva ELIMINARE in qualche modo sia tornata indietro.