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

Hvorfor springer mysql nogle auto-increment-id'er over?

Det er et eksempel på automatisk inkrementlåsning i InnoDB:Da du udfører 2 sætninger samtidigt i samme session:den automatiske inkrementlås opnås ved den første forespørgsel, og genereringen af ​​autoinkrementværdier er ikke flettet mellem sætningerne - det er hele pointen af transaktionen.

Dette vil altid ske ved design:Hvis det ikke gjorde det, ville den måde, transaktionerne i InnoDB fungerer på, ikke fungere. Skalerbarhed under belastninger af OLTP-typen ville være forfærdelig, da hver indsats ville skulle vente på, at hver anden indsats er færdig, bliver forpligtet eller endnu værre - rullet tilbage.

Dvs.:Hvis din første indsats løber 5 gange længere end din anden, og fejler og bliver rullet tilbage, fuldføres den anden stadig og er blevet committet. Ellers skulle du vente på ea. forespørgslen skal være komplet efter den anden.

Hvis du har brug for sekventielle og absolut unikke ID #'er, skal du trække dem fra en anden kilde. AutoInc-kolonner garanterer simpelthen en unik værdi - ikke nødvendigvis en monosekvens - det er et punkt med serialisering og en flaskehals.

En vej rundt om dette, hvis andet kræves:

sæt innodb_autoinc_lock_mode = 0 i din my.cnf/mysql.ini

Beskrivelse af automatisk inc-låsning i InnoDB og Options



  1. Unikt identificerende foldermarkører

  2. Hurtig måde at generere sammenkædede strenge i Oracle

  3. Hvordan kan jeg oprette en bruger i SQL Server Express-databasen, jeg føjede til mit projekt?

  4. Brug IN-direktivet til at søge med en forberedt redegørelse