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á bloqueadoREAD 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 cortoREPEATABLE READ
ySERIALIZABLE
- el bloqueo compartido se adquiere y se mantiene hasta el final de la transacción -UPDATE
está bloqueado hasta queSELECT
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.