Ja - till viss del.
Hur länge en SELECT
håller fast vid ett delat lås beror på isoleringsnivån för transaktionen:
READ UNCOMMITTED
- inget delat lås förvärvas alls -UPDATE
är inte blockeradREAD COMMITTED
- delat lås förvärvas bara för att läsa data -UPDATE
kan vara blockerad under en mycket kort tidREPEATABLE READ
ochSERIALIZABLE
- delat lås förvärvas och hålls kvar till slutet av transaktionen -UPDATE
är blockerad tillsSELECT
transaktionen avslutas
Tekniskt sett är UPDATE
satsen får först en UPDATE
lås - som är kompatibelt med ett delat lås (som används av SELECT
) - under den tid som den läser av de aktuella värdena för raderna som ska uppdateras.
När det är gjort visas Update
låset eskaleras till ett exklusivt lås för att den nya datan ska skrivas till tabellen.