sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server:¿[SELECCIONAR] bloquea [ACTUALIZAR]?

Sí, hasta cierto punto.

Cuánto tiempo un SELECT retener un bloqueo compartido depende del nivel de aislamiento de la transacción:

  • READ UNCOMMITTED - no se adquiere ningún bloqueo compartido - UPDATE no está bloqueado
  • READ COMMITTED - el bloqueo compartido se adquiere solo durante la lectura de los datos - UPDATE podría estar bloqueado por un período de tiempo muy corto
  • REPEATABLE READ y SERIALIZABLE - el bloqueo compartido se adquiere y se mantiene hasta el final de la transacción - UPDATE está bloqueado hasta que SELECT finaliza la transacción

Técnicamente, UPDATE la declaración primero obtiene una UPDATE bloqueo - que es compatible con un bloqueo compartido (como lo usa el SELECT ) - por la duración del tiempo mientras lee los valores actuales de las filas que se actualizarán.

Una vez hecho esto, el Update el bloqueo se escala a un bloqueo exclusivo para que los nuevos datos se escriban en la tabla.