Sim - até certo ponto.
Quanto tempo um
SELECT
mantém um bloqueio compartilhado depende do nível de isolamento da transação:READ UNCOMMITTED
- nenhum bloqueio compartilhado é adquirido -UPDATE
não está bloqueadoREAD COMMITTED
- o bloqueio compartilhado é adquirido apenas durante a leitura dos dados -UPDATE
pode ser bloqueado por um período muito curto de tempoREPEATABLE READ
eSERIALIZABLE
- o bloqueio compartilhado é adquirido e mantido até o final da transação -UPDATE
é bloqueado até que oSELECT
transação termina
Tecnicamente, o
UPDATE
primeiro obtém um UPDATE
lock - que é compatível com um bloqueio compartilhado (como usado pelo SELECT
) - durante o tempo em que estiver lendo os valores atuais das linhas a serem atualizadas. Feito isso, o
Update
lock é escalado para um bloqueio exclusivo para que os novos dados sejam gravados na tabela.