Você está procurando por bloqueios nomeados (cuidado, coisas perigosas, não tente experimentar bloqueios em servidores de produção:D).
Dê uma olhada em:
A1 :Escolha uma string exclusiva para bloquear e use
GET_LOCK
nele (digamos, GET_LOCK('conversation_' || [id])
; se retornar 1
a fechadura é sua. Faça o que quiser e depois ligue para RELEASE_LOCK
(considerando todos os cenários possíveis, incluindo erros). A2 :O segundo parâmetro de
GET_LOCK
é um tempo limite em segundos . Se a operação expirar GET_LOCK
retornará 0
. Da documentação oficial
Os negritos são meus:
- Significa que você só pode manter um bloqueio por conexão (não é um problema para o seu caso de usuário)
- Significa que os bloqueios serão liberados assim que você fechar a conexão
- Significa que duas conexões diferentes (mesmo do mesmo pool) podem não adquirir a mesma aparência ao mesmo tempo.