Le mécanisme auto_increment est nécessaire pour générer unique valeurs supérieures à toute valeur générée précédemment. Il ne garantit pas de générer consécutif valeurs.
Il y a une discussion à ce sujet ici :https://bugs.mysql.com/bug. php?id=57643
Il est peu important de générer fidèlement des valeurs consécutives, car toute valeur peut être "perdue" pour d'autres raisons :
- Votre INSERT échoue, par exemple en raison de la violation d'une contrainte comme UNIQUE KEY ou FOREIGN KEY.
- Vous annulez la transaction pour votre INSERT.
- Vous réussissez et validez, mais plus tard, la ligne est SUPPRIMÉE par vous ou une autre session.
Les valeurs d'auto-inc ne sont renvoyées à aucun type de file d'attente, car d'autres sessions simultanées peuvent avoir généré d'autres valeurs d'identifiant entre-temps. Cela ne vaut pas la peine qu'InnoDB maintienne un pool de valeurs d'identifiant non allouées, car ce pool pourrait devenir énorme et inutile.
En outre, il peut être approprié de "perdre" une valeur d'ID, sinon quelqu'un penserait que la ligne qu'il voulait SUPPRIMER est revenue d'une manière ou d'une autre.