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 -UPDATEno está bloqueadoREAD COMMITTED- el bloqueo compartido se adquiere solo durante la lectura de los datos -UPDATEpodría estar bloqueado por un período de tiempo muy cortoREPEATABLE READySERIALIZABLE- el bloqueo compartido se adquiere y se mantiene hasta el final de la transacción -UPDATEestá bloqueado hasta queSELECTfinaliza 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.