Ir para conteúdo

POWERED BY:

Arquivado

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

Walter Aragão

lock table (controle de transação)

Recommended Posts

Boa tarde amigos,

estou desenvolvendo um sistema no qual faço um insert em duas tabelas com informações que vem de um único formulário.

 

estou tentando arrumar um jeito de bloquear as tabelas para pegar o ultimo id da primeira e salvar na segunda(chave estrangeira), uma vez que não esteja bloqueada o comando MAX() pode sofrer concorrencia e a chave estrangeira sair errada.
Estou fazendo dentro de uma procedure .. como ficaria trancar a tabela fazer o select MAX() e o insert na segunda?

 

abraços!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual a linguagem q vc esta desenvolvendo?

é quase certeza q ele tem uma função ou metodo q retorne o ultimo id inserido, travar as tabelas não é uma boa ideia, no lugar inicie uma transação para fazer os dois inserts

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não conheço MySql mas o próprio Autoincrement não se encarrega de garantir a unicidade.

 

O problema seria impedir as "banguelas" , ou seja , que um número da sequencia seja quebrado.

 

Aí só com uma tabela de controle e lock.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Supondo duas apps em pararelo :

 

lastid 777

 

Aplicacao 1 Aplicacao 2

----------------------------------------------------------------------------------

insert (778) --

-- insert (779)

processo x --

rollback --

-- commit

end end

-------------------------------------------------------------------------------------

 

lastid 779

é o id 778 não existe.

 

Correto ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

então vc tem mudar o nivel de transações para serial/serializado q processo isso em lote.

 

no php vc pode usar a função mysql_insert_id para pegar o ultimo id adicionado, veja no link tem uns exemplos

http://php.net/manual/en/function.mysql-insert-id.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usar Stored Procedure seria um caminho mais real e eficiente para este caso, mas aí podem aparecer aqueles que preferem colocar as regras de negócio na aplicação, outros que preferem no SGBD... bem, não sou eu quem vai dizer qual é melhor ou menos pior, ambos podem atender bem e resolver o problema, desde que bem implementados.

 

Ou, invéz de usar o recurso de auto incremento, criar um recurso seu, que seja mais eficiente e controlado adequadamente.

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.