sql >> Database >  >> RDS >> Mysql

Waarom slaat mysql sommige auto-increment-id's over?

Het is een voorbeeld van automatische incrementvergrendeling in InnoDB:aangezien u tegelijkertijd 2 instructies in dezelfde sessie uitvoert:de automatische inc-vergrendeling wordt verkregen door de eerste query en de auto-increment-waardegeneratie wordt niet tussen de instructies geplaatst - dat is het hele punt van transactie.

Dit zal altijd gebeuren door het ontwerp:als dat niet zo was, zou de manier waarop de transacties in InnoDB werken, nou ja, niet werken. Schaalbaarheid onder belasting van het OLTP-type zou verschrikkelijk zijn, omdat elke insert zou moeten wachten tot elke andere insert klaar is, gecommitteerd of erger - teruggedraaid.

D.w.z.:als je eerste insert 5x langer duurt dan je tweede, en mislukt en wordt teruggedraaid, wordt de tweede nog steeds voltooid en is vastgelegd. Anders zou je moeten wachten op ea. zoekopdracht na elkaar af te ronden.

Als je opeenvolgende en absoluut unieke ID-nummers nodig hebt, haal ze dan uit een andere bron. AutoInc-kolommen garanderen eenvoudigweg een unieke waarde - niet noodzakelijk een monosequentie - dat is een punt van serialisatie en een knelpunt.

Een manier om dit te omzeilen, indien anders vereist:

stel innodb_autoinc_lock_mode = 0 in in uw my.cnf/mysql.ini

Beschrijving van automatische vergrendeling in InnoDB en Opties



  1. Selecteer uit tabel als record in een andere tabel is gevonden

  2. Hoe debug je opgeslagen MySQL-procedures?

  3. 3 manieren om alle triggers voor een bepaalde tabel in PostgreSQL op te sommen

  4. Android SQLite LIKE escape-jokerteken