Sì, fino a un certo punto.
Quanto dura un SELECT
mantiene un blocco condiviso dipende dal livello di isolamento della transazione:
READ UNCOMMITTED
- non viene acquisito alcun blocco condiviso -UPDATE
non è bloccatoREAD COMMITTED
- il blocco condiviso viene acquisito solo per la durata della lettura dei dati -UPDATE
potrebbe essere bloccato per un periodo di tempo molto breveREPEATABLE READ
eSERIALIZABLE
- il blocco condiviso viene acquisito e mantenuto fino al termine della transazione -UPDATE
è bloccato fino a quando ilSELECT
transazione termina
Tecnicamente, il UPDATE
prima ottiene un UPDATE
lock - che è compatibile con un lock condiviso (come usato da SELECT
) - per tutta la durata della lettura dei valori correnti delle righe da aggiornare.
Una volta fatto, il Update
lock viene elevato a un blocco esclusivo per i nuovi dati da scrivere nella tabella.