Bom dia!
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?
Obrigado!
[]'s
Não entendi o que deseja fazer.
Pode dar um exemplo mais claro.
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…
Você está se referindo à acessos concorrentes, certo?
Bem, uma trigger poderia resolver isto, não?
Poderia dar um exemplo?
Não consigo imaginar como seria isso…
[edit]
“Isso” seria como verificar se o registro ja esta sendo lido…
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.
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.
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…
=/
Aqui não tive esse erro
mysql> select * from test for update;
+------+------+
| id | nome |
+------+------+
| 1 | a |
+------+------+
1 row in set (0.00 sec)
Então deve ser a versao do banco mesmo, como eu suspeitava…
Ai voce usa qual?
Esta
Server version: 5.5.11 MySQL Community Server (GPL)
Vou atualizar o banco aqui e ve o que da…
Obrigado pela ajuda amigo!
[]'s