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

¿Cómo realizar un bloqueo de fila?

Suponiendo que se trata de un servidor MS SQL, probablemente desee UPDLOCK , posiblemente combinado con ROWLOCK (Sugerencias de tabla ). Tengo problemas para encontrar un artículo decente que describa la teoría, pero aquí hay un ejemplo rápido:

SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1 

Esta instrucción colocará un bloqueo de actualización en la fila durante la duración de la transacción (por lo que es importante saber cuándo finalizará la transacción). Dado que los bloqueos de actualización son incompatibles con los bloqueos exclusivos (requerido para actualizar registros), esto evitará que alguien actualice este registro hasta que finalice la transacción.

Tenga en cuenta que otros procesos que intenten modificar este registro se bloquearán hasta que se complete la transacción; sin embargo, continuarán con cualquier operación de escritura que hayan solicitado una vez que finalice la transacción (a menos que se agote el tiempo de espera o se elimine como un proceso bloqueado). Si desea evitar esto, sus otros procesos deben usar sugerencias adicionales para cancelar si se detecta un bloqueo incompatible u omitir el registro si ha cambiado.

Además, no debe usar este método para bloquear registros mientras espera la entrada del usuario . Si esta es su intención, entonces debería agregar algún tipo de columna "en proceso de modificación" a su tabla.

Los mecanismos de bloqueo del servidor SQL realmente solo son adecuados para preservar la integridad de los datos/prevenir interbloqueos:las transacciones generalmente deben mantenerse lo más cortas posible y ciertamente no debe mantenerse mientras se espera la entrada del usuario.