Ik heb geprobeerd het verschil tussen de twee te begrijpen. Ik zal documenteren wat ik heb gevonden in de hoop dat het nuttig zal zijn voor de volgende persoon.
Beide LOCK IN SHARE MODE
en FOR UPDATE
zorg ervoor dat geen enkele andere transactie de geselecteerde rijen kan bijwerken. Het verschil tussen de twee zit hem in de manier waarop ze sloten behandelen tijdens het lezen van gegevens.
LOCK IN SHARE MODE
verhindert niet dat een andere transactie dezelfde rij leest die was vergrendeld.
FOR UPDATE
voorkomt andere vergrendelende leesbewerkingen van dezelfde rij (niet-vergrendelende leesbewerkingen kunnen die rij nog steeds lezen; LOCK IN SHARE MODE
en FOR UPDATE
zijn vergrendelde leesbewerkingen).
Dit is van belang in gevallen zoals het bijwerken van tellers, waarbij u de waarde in de ene verklaring leest en de waarde in een andere bijwerkt. Hier met behulp van LOCK IN SHARE MODE
laat 2 transacties dezelfde initiële waarde lezen. Dus als de teller door beide transacties met 1 werd verhoogd, zou de eindtelling slechts met 1 kunnen toenemen - aangezien beide transacties aanvankelijk dezelfde waarde hadden.
FOR UPDATE
gebruiken zou de 2e transactie hebben geblokkeerd van het lezen van de waarde totdat de eerste is voltooid. Dit zorgt ervoor dat de teller met 2 wordt verhoogd.