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 -UPDATEnão está bloqueadoREAD COMMITTED- o bloqueio compartilhado é adquirido apenas durante a leitura dos dados -UPDATEpode ser bloqueado por um período muito curto de tempoREPEATABLE READeSERIALIZABLE- o bloqueio compartilhado é adquirido e mantido até o final da transação -UPDATEé bloqueado até que oSELECTtransaçã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.