InnoDB är en transaktionsmotor.
Det betyder att i följande scenario:
Session Ainfogar post1Session Binfogar post2Session Arullar tillbaka
, det finns antingen en möjlighet till en lucka eller session B skulle låsa tills session A begått eller rullat tillbaka.
InnoDB designers (som de flesta andra transaktionsmotordesigners) valde att tillåta luckor.
Från dokumentationen :
När du kommer åt räknaren för automatisk ökning,
InnoDBanvänder en speciell tabellnivåAUTO-INClås som den behåller till slutet av nuvarandeSQLuttalande, inte till slutet av transaktionen. Den speciella låsfrigöringsstrategin introducerades för att förbättra samtidigheten för insättningar i en tabell som innehåller enAUTO_INCREMENTkolumn…
InnoDBanvänder den automatiska inkrementräknaren i minnet så länge servern körs. När servern stoppas och startas om,InnoDBåterinitierar räknaren för varje tabell för den förstaINSERTtill bordet, som beskrivits tidigare.
Om du är rädd för id kolumn omslutande, gör den till BIGINT (8-byte lång).