sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor øges MySQL autoincrement ved mislykkede inserts?

InnoDB er en transaktionsmotor.

Det betyder, at i følgende scenarie:

  1. Session A indsætter post 1
  2. Session B indsætter post 2
  3. Session A ruller 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).



  1. Opretter du en logningshandler for at oprette forbindelse til Oracle?

  2. Sådan indsætter du store mængder data i sqlite-databasen i Android

  3. Matchende Oracle duplikatkolonneværdier ved hjælp af Soundex, Jaro Winkler og Edit Distance (UTL_MATCH)

  4. SQL Server COALESCE() Forklaret