Bruno V M 0 Denunciar post Postado Abril 18, 2011 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
Vinicius Cruz 1 Denunciar post Postado Abril 18, 2011 Não sei se entendi bem, mas parece que no seu caso, o uso de transações resolve. http://dev.mysql.com/doc/refman/5.0/en/commit.html Compartilhar este post Link para o post Compartilhar em outros sites
Bruno V M 0 Denunciar post Postado Abril 19, 2011 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
jpraminelli 3 Denunciar post Postado Abril 19, 2011 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
Bruno V M 0 Denunciar post Postado Abril 19, 2011 Já mas estou usando innoDb, pela documentação do SQl nao funciona.. estou correto ? Compartilhar este post Link para o post Compartilhar em outros sites