Jag har försökt förstå skillnaden mellan de två. Jag kommer att dokumentera vad jag har hittat i hopp om att det ska vara användbart för nästa person.
Båda LOCK IN SHARE MODE
och FOR UPDATE
se till att ingen annan transaktion kan uppdatera raderna som är markerade. Skillnaden mellan de två är hur de behandlar lås när de läser data.
LOCK IN SHARE MODE
hindrar inte en annan transaktion från att läsa samma rad som var låst.
FOR UPDATE
förhindrar andra låsande läsningar av samma rad (icke-låsande läsningar kan fortfarande läsa den raden; LOCK IN SHARE MODE
och FOR UPDATE
låser avläsningar).
Detta har betydelse i fall som uppdatering av räknare, där du läser av värdet i en sats och uppdaterar värdet i en annan. Här använder du LOCK IN SHARE MODE
kommer att tillåta 2 transaktioner att läsa samma initiala värde. Så om räknaren ökades med 1 av båda transaktionerna, kan sluträkningen bara öka med 1 - eftersom båda transaktionerna initialt läste samma värde.
Använder FOR UPDATE
skulle ha låst den andra transaktionen från att läsa värdet tills den första är klar. Detta kommer att säkerställa att räknaren ökas med 2.