InnoDB
är en transaktionsmotor.
Det betyder att i följande scenario:
Session A
infogar post1
Session B
infogar post2
Session A
rullar 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,
InnoDB
använder en speciell tabellnivåAUTO-INC
lås som den behåller till slutet av nuvarandeSQL
uttalande, 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_INCREMENT
kolumn…
InnoDB
anvä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örstaINSERT
till bordet, som beskrivits tidigare.
Om du är rädd för id
kolumn omslutande, gör den till BIGINT
(8-byte lång).