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.