Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server - [SELECT] bloqueia [UPDATE]?


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á bloqueado
  • READ COMMITTED - o bloqueio compartilhado é adquirido apenas durante a leitura dos dados - UPDATE pode ser bloqueado por um período muito curto de tempo
  • REPEATABLE READ e SERIALIZABLE - o bloqueio compartilhado é adquirido e mantido até o final da transação - UPDATE é bloqueado até que o SELECT 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.