Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno V M

select for update

Recommended Posts

Olá Amigos,

Sou novo no forum e já tenho uma ótima dúvida para quebrarmos a cabeça.. rs

Estou fazendo 2 paginas php com mysql_pconnect (persistencia de conexão).

Quero utilizar o recurso select * from tabela where id = 2 FOR UPDATE; (onde ele trava o registro para fazer o update).

Na ferramenta Mysql Query Brownser, se eu executo 2 abas com o mesmo select ele retorna um registro na primeira aba, e na segunda aba e fica aguardando a transação da primeira acabar. PERFEITO!

No php isto nao funciona =(, eu executo 2 paginas PHP, ele retorna instantaneamente o mesmo registro nas 2, quando o correto seria ele dar erro de timeout na segunda consulta.

 

Não sei se consegui me expressar bem, mas é isto.

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade a transação acho que não funciona..

Eu tenho uma tabela de usuarios por exemplo.. quando eu clico para editar um, o sistema vai no banco e faz o begin transaction; select * from usuarios where id = 1 FOR UPDATE;

Isto vai travar o registro para ninguem conseguir fazer outro select, ele vai ficar atravado até que esta transação seja finalizada.

Caso outro usuário clique no mesmo registro ele vai fazer a mesma coisa begin transaction; select * from usuarios where id = 1 FOR UPDATE; só que vai dar timeout pq o mysql nao deixa pegar o mesmo registro em 2 transações para edição.

Isto funciona bem no phpmyadmin, mas na aplicação não =(

Ajudei um pouco ? rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

você ja tentou usar o lock


 TABLES trans READ, customer WRITE;
      SELECT SUM(value) FROM trans WHERE customer_id=some_id;
      UPDATE customer SET total_value=sum_from_previous_statement WHERE customer_id=some_id; 
 UNLOCK TABLES;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.