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

Como executar um bloqueio de linha?


Com a suposição de que este é o servidor MS SQL, você provavelmente deseja UPDLOCK , possivelmente combinado com ROWLOCK (Dicas de tabela ). Estou tendo problemas para encontrar um artigo decente que descreva a teoria, mas aqui está um exemplo rápido:
SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1 

Esta declaração colocará um bloqueio de atualização na linha durante a transação (portanto, é importante estar ciente de quando a transação terminará). Como os bloqueios de atualização são incompatíveis com bloqueios exclusivos (necessário para atualizar os registros), isso impedirá que alguém atualize esse registro até que a transação termine.

Observe que outros processos que tentarem modificar esse registro serão bloqueados até que a transação seja concluída, no entanto, continuarão com qualquer operação de gravação solicitada após o término da transação (a menos que tenham expirado ou encerrado como um processo em deadlock). Se você deseja evitar isso, seus outros processos precisam usar dicas adicionais para abortar se um bloqueio incompatível for detectado ou pular o registro se ele for alterado.

Além disso, Você não deve usar este método para bloquear registros enquanto aguarda a entrada do usuário . Se esta é sua intenção, você deve adicionar algum tipo de coluna "sendo modificada" à sua tabela.

Os mecanismos de bloqueio do servidor SQL são realmente adequados apenas para preservar a integridade dos dados / evitar deadlocks - as transações geralmente devem ser mantidas o mais curtas possível e certamente não deve ser mantido enquanto aguarda a entrada do usuário.