Gostaria de saber se existe alguma forma de travar o registro do banco de dados, quando o programa der um select naquela linha… Andei lendo algo sobre “for update” no comando select, mas acontece que quando utilizamos esse comando em uma consulta no banco, da erro de sintaxe… A versao do mysql utilizada é a 5.0.75.
Sera que ela nao da suporte ao “for update”?
Alguem ja teve que fazer isso?
Não entendi o que deseja fazer.
Pode dar um exemplo mais claro.
L
lucasgcp
Claro!
Existe um sistema onde é possivel fazer manutenção de dados na tabela de eventos!
So que ai surgem um problema: o usuario 1 faz a leitura do dado X na tabela para que ele possa alterar! Enquanto ele esta alterando o usuario 2 le esse mesmo dado X para alterar tambem. Se o usuario 1 terminar primeiro, as alterações feitas por ele serao perdidads quando o usuario 2 salvar as alteraçoes que ele fez!
Ai seria necessario travar o registro do dado X ate que o usuario que esteja alterando ele o libere.
Seria mais ou menos isso…
drsmachado
Você está se referindo à acessos concorrentes, certo?
Bem, uma trigger poderia resolver isto, não?
L
lucasgcp
Poderia dar um exemplo?
Não consigo imaginar como seria isso…
[edit]
“Isso” seria como verificar se o registro ja esta sendo lido…
drsmachado
O que me ocorreu foi o seguinte, criar uma coluna “em_uso” e, uma trigger antes do select que a sete como “1”. Porém, isto implicaria em ter de retirar esta flag depois da consulta. Talvez, usando o código do usuário que está fazendo a consulta e liberando caso seja igual.
Até onde sei, o mysql não possui qualquer função pronta para isso.
drsmachado
Ops, dei uma nova olhada e achei isto http://forums.whirlpool.net.au/archive/498624
Vê se ajuda.
Ah testei, mas como to sem qualquer ferramenta gráfica aqui, não consegui criar outro user. Com 2 terminais, root, não funciona.
L
lucasgcp
Eu pensei em fazer isso, mas o pessoal nao aprovou muito a ideia…
O estranho é que na documentação do mysql tem o for update… mas nas consultas sempre retorna erro de sintaxe…