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 -UPDATEnon è bloccatoREAD COMMITTED- il blocco condiviso viene acquisito solo per la durata della lettura dei dati -UPDATEpotrebbe essere bloccato per un periodo di tempo molto breveREPEATABLE READeSERIALIZABLE- il blocco condiviso viene acquisito e mantenuto fino al termine della transazione -UPDATEè bloccato fino a quando ilSELECTtransazione 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.