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

MySQL Auto Increment Columns på TRANSACTION, COMMIT og ROLLBACK

Nej, automatiske stigningsmekanismer skal arbejde uden for transaktionernes omfang, fordi en anden bruger muligvis indsætter i samme tabel, før du afslutter din transaktion. Den anden brugers transaktion skal være i stand til at allokere den næste værdi, før du ved, om din transaktion bruger den værdi, du lige har tildelt.

Om din kommentar:Hvis jeg må sige det mere tydeligt, kan enhver ændring i omfanget af en transaktion blive rullet tilbage. Tælleren for automatisk stigning er ikke rullet tilbage, så den adlyder ikke atomicitet af transaktioner. Den adlyder heller ikke isolation fordi en anden transaktion får den næste værdi, selvom din transaktion ikke er forpligtet endnu.

Måden auto-inkrementering fungerer på betyder, at nogle gange, hvis du indsætter nogle rækker og derefter ruller din transaktion tilbage, går de værdier, du tildelte med auto-increment, tabt for altid!

Men det her er okay. Primære nøgleværdier skal være unikke, men de behøver ikke at være fortløbende. Det er med andre ord ikke rækkenumre, og du skal ikke bruge dem sådan. Så du burde aldrig have behov for at formindske værdier, der er oprettet ved automatisk stigning.



  1. Sådan bruges IF...THEN Logic i SQL Server

  2. Få de underliggende kolonner i en visning baseret på dens resultatsæt

  3. MySQL diakritisk ufølsom søgning (spanske accenter)

  4. mysql PDO og lagret procedure dynamisk SQL-injektion