Estou tendo problemas com modelo transacional no Mysql. Estou usando da seguinte forma:
Começo uma transação em uma aplicação que roda em uma máquina cliente...:
Start Transaction;
Depois executo vários scripts sql, entre eles o primeiro é um select que busca o "id" de uma tabela e soma 1 para gerar o próximo ID....
Ao final dou um Commit ou se houver problemas um RollBack.
O problema é que se quando um cliente starta uma transação como descrita acima, e o script sql busca e gera o próximo ID, e faz um insert, tudo isso dentro da transação e ANTES de dar um commit, Um outro cliente tambem starta uma transação, que tb roda o script para gerar o próximo ID, ele "aponta" para um ID igual ao do outro cliente , pois o mesmo ainda não deu Commit , quando um deles finaliza dando o Commit, "pega" o id gerado, e quando o outro cliente vai finalizar dando o commit, dá um erro de Key Violation porque esta com um valor de ID que já foi salvo no banco.
Como usar transação e evitar isso, ou tem como fazer um select que "enchergue" esse registro fantasma, para evitar Key Violation?
Pergunta
wRangel
Estou tendo problemas com modelo transacional no Mysql. Estou usando da seguinte forma:
Começo uma transação em uma aplicação que roda em uma máquina cliente...:
Start Transaction;
Depois executo vários scripts sql, entre eles o primeiro é um select que busca o "id" de uma tabela e soma 1 para gerar o próximo ID....
Ao final dou um Commit ou se houver problemas um RollBack.
O problema é que se quando um cliente starta uma transação como descrita acima, e o script sql busca e gera o próximo ID, e faz um insert, tudo isso dentro da transação e ANTES de dar um commit, Um outro cliente tambem starta uma transação, que tb roda o script para gerar o próximo ID, ele "aponta" para um ID igual ao do outro cliente , pois o mesmo ainda não deu Commit , quando um deles finaliza dando o Commit, "pega" o id gerado, e quando o outro cliente vai finalizar dando o commit, dá um erro de Key Violation porque esta com um valor de ID que já foi salvo no banco.
Como usar transação e evitar isso, ou tem como fazer um select que "enchergue" esse registro fantasma, para evitar Key Violation?
Desde já grato pelas possíveis respostas.
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.