sql >> Databasteknik >  >> RDS >> Mysql

MySQL InnoDB:Skillnaden mellan `FÖR UPPDATERING` och `LOCK IN DELINGSLÄGE`

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.



  1. Android-program för att konvertera SQLite-databasen till Excel

  2. Hur man installerar Squirrel SQL Client

  3. Är det säkert att lagra användarnamn och lösenord i databasen?

  4. Styra replikeringsfel för MySQL och MariaDB med skript före eller efter fel