Механизмът auto_increment е необходим за генериране на уникален стойности, които са по-големи от всяка стойност, генерирана преди това. Това не гарантира генерирането на последователни стойности.
Тук има дискусия за това:https://bugs.mysql.com/bug. php?id=57643
Прецизното генериране на последователни стойности е малко важно, защото всяка стойност може да бъде „загубена“ по други причини:
- Вашият INSERT е неуспешен, например поради нарушаване на ограничение като UNIQUE KEY или FOREIGN KEY.
- Вие отменяте транзакцията за вашия INSERT.
- Успявате и се ангажирате, но по-късно редът е ИЗТРИТ от вас или друга сесия.
Стойностите за автоматично включване не се връщат към какъвто и да е вид опашка, тъй като други едновременни сесии може да са генерирали допълнителни стойности на идентификатор междувременно. Не си струва InnoDB да поддържа пул от неразпределени идентификационни стойности, защото този пул може да стане огромен и разточителен.
Освен това може да е подходящо да се „загуби“ стойност на идентификатора, в противен случай някой би си помислил, че редът, който искаха да ИЗТРИХАТ, някак си се върна.