Ja - tot op zekere hoogte.
Hoe lang een SELECT
vasthouden aan een gedeeld slot is afhankelijk van het isolatieniveau van de transactie:
READ UNCOMMITTED
- er wordt helemaal geen gedeeld slot verkregen -UPDATE
is niet geblokkeerdREAD COMMITTED
- gedeelde vergrendeling wordt alleen verkregen voor de duur van het lezen van de gegevens -UPDATE
kan voor een zeer korte periode worden geblokkeerdREPEATABLE READ
enSERIALIZABLE
- gedeelde vergrendeling wordt verkregen en vastgehouden tot het einde van de transactie -UPDATE
wordt geblokkeerd totdat deSELECT
transactie eindigt
Technisch gezien is de UPDATE
statement krijgt eerst een UPDATE
slot - dat compatibel is met een gedeeld slot (zoals gebruikt door de SELECT
) - voor de duur van de tijd terwijl het de huidige waarden leest van de rijen die moeten worden bijgewerkt.
Zodra dat is gebeurd, wordt de Update
lock wordt geëscaleerd naar een exclusieve lock voor de nieuwe gegevens die naar de tabel moeten worden geschreven.