InnoDB
to silnik transakcyjny.
Oznacza to, że w następującym scenariuszu:
Session A
wstawia rekord1
Session B
wstawia rekord2
Session A
cofa się
, istnieje możliwość przerwy lub session B
zablokuje się do session A
zatwierdzone lub wycofane.
InnoDB
projektanci (jak większość innych projektantów silników transakcyjnych) postanowili uwzględnić luki.
Z dokumentacji :
Podczas uzyskiwania dostępu do licznika automatycznego przyrostu, InnoDB
używa specjalnego AUTO-INC
na poziomie tabeli blokada, którą utrzymuje do końca bieżącego SQL
oświadczenie, a nie do końca transakcji. Wprowadzono specjalną strategię zwalniania blokad, aby poprawić współbieżność dla wstawek do tabeli zawierającej AUTO_INCREMENT
kolumna
…
InnoDB
używa licznika automatycznego przyrostu w pamięci tak długo, jak działa serwer. Gdy serwer zostanie zatrzymany i zrestartowany, InnoDB
ponownie inicjuje licznik dla każdej tabeli dla pierwszego INSERT
do tabeli, jak opisano wcześniej.
Jeśli boisz się id
zawijanie kolumn dookoła, zrób to BIGINT
(8-bajtów długości).