InnoDB er en transaktionsmotor.
Det betyder, at i følgende scenarie:
Session Aindsætter post1Session Bindsætter post2Session Aruller tilbage
, er der enten mulighed for et hul eller session B ville låse indtil session A forpligtet eller rullet tilbage.
InnoDB designere (som de fleste af de andre transaktionsmotordesignere) valgte at tillade huller.
Fra dokumentationen :
Når du får adgang til tælleren for automatisk stigning, InnoDB bruger en speciel tabelniveau AUTO-INC lås, som den holder til slutningen af den aktuelle SQL erklæring, ikke til slutningen af transaktionen. Den særlige låsefrigørelsesstrategi blev introduceret for at forbedre samtidighed for indsættelser i en tabel, der indeholder en AUTO_INCREMENT kolonne
…
InnoDB bruger tælleren for automatisk stigning i hukommelsen, så længe serveren kører. Når serveren er stoppet og genstartet, InnoDB geninitialiserer tælleren for hver tabel for den første INSERT til bordet, som beskrevet tidligere.
Hvis du er bange for id spalte ombrydes, gør den BIGINT (8-byte lang).