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

MySQL InnoDB:Forskellen mellem "TIL OPDATERING" og "LÅS I DELINGSMODUS"

Jeg har forsøgt at forstå forskellen mellem de to. Jeg vil dokumentere, hvad jeg har fundet i håb om, at det vil være nyttigt for den næste person.

Begge LOCK IN SHARE MODE og FOR UPDATE sikre, at ingen anden transaktion kan opdatere de valgte rækker. Forskellen mellem de to er, hvordan de behandler låse, mens de læser data.

LOCK IN SHARE MODE forhindrer ikke en anden transaktion i at læse den samme række, som blev låst.

FOR UPDATE forhindrer andre låsende læsninger af den samme række (ikke-låsende læsninger kan stadig læse den række; LOCK IN SHARE MODE og FOR UPDATE låser læser).

Dette har betydning i tilfælde som opdatering af tællere, hvor du læser værdien i 1 sætning og opdaterer værdien i en anden. Her ved hjælp af LOCK IN SHARE MODE vil tillade 2 transaktioner at læse den samme begyndelsesværdi. Så hvis tælleren blev forøget med 1 af begge transaktioner, vil slutantallet muligvis kun stige med 1 - da begge transaktioner oprindeligt læste den samme værdi.

Bruger FOR UPDATE ville have låst den 2. transaktion fra at læse værdien, til den første er gennemført. Dette vil sikre, at tælleren øges med 2.



  1. Opret forbindelse til ekstern MySQL-database ved hjælp af VB.NET 2010

  2. Skrivning af en csv-fil til SQL Server-database ved hjælp af python

  3. mysqldump med flere tabeller med eller uden where-klausul

  4. Arbejde med begivenheder i Oracle Cloud Infrastructure Del 1:grundlæggende service