Travando Registro Com Innobd
#1
Posted 10/01/2011, 07:29
pessoal, seguinte:
imagem a query
START TRANSACTION;
select * from tabela where nome like "%teste%";
COMMIT;
Bom, o que quero saber é:
Usando o TRANSACTION ele trava o registro?
destravando, digamos assim, quando na alteração(página seguinte)na páina seguinte, usando o commit??
resumindo a pergunta:
usando apenas o transaction ele trava o registro?em quem momento ele "destrava"?
http://www.iconsorciofiat.com.br.
#2
Posted 10/01/2011, 11:47
START TRANSACTION;
select * from tabela where nome like "%teste%" for update;
COMMIT;
Ele vai ser destravado no commit. Mas o start transaction não permanece entre os acessos. Assim que a conexão é fechada no fim do script, a transação é encerrada também. Se você pretende usar isso pra fazer um form de edição, não vai funcionar.
#3
Posted 11/01/2011, 07:25
aí, quando clicar para pegar um novo cliente(registro) executo a query precedida pelo START TRANSACTION,nesse caso especificamente faço um update colocando meu id, no registro(no campo "operador")termino com o commit
NESSE caso, esse registro ficará trancado, o tempo necessário para execução dessas instruções, logo, posso presumir que 2 pessoas não pegarão o mesmo registro ao mesmo tempo, correto????
Abração!!
Horácio
http://www.iconsorciofiat.com.br.
#4
Posted 11/01/2011, 11:26
#5
Posted 11/01/2011, 13:27
- um para escolher um cliente...
- outro para associar ao cliente...
http://www.iconsorciofiat.com.br.
#6
Posted 11/01/2011, 13:48
escolhe_cliente.php
require 'conexao.php'; mysql_query('START TRANSACTION'); mysql_query("select * from tabela where nome like '%teste%' for update"); // imprime um form com um select e um botaoassocia_cliente.php
require 'conexao.php'; mysql_query('UPDATE...'); mysql_query('COMMIT');Isso não pode. O que pode é:
require 'conexao.php'; mysql_query('START TRANSACTION'); mysql_query("select * from tabela where nome like '%teste%' for update"); // faz algum processamento mysql_query('UPDATE...'); mysql_query('COMMIT');
#7
Posted 11/01/2011, 14:36
qual a diferença para Desktop???só isso que não entendi...
entendi...
se tiver uma sequencia de sql, seja ela por exemplo, pesquisa, alterar como nesse caso, ela trava enquanto esses 2 comandos(2 nesse caso, poderiam ser 3,4, 5, 6...)estiverem entre start TRANSACTION e COMMIT...
SE tiver 4(5,1,2,3,30...) comandos sql eles ficarão travados enquanto estiverem entre essas "marcações" e evitarão esses erros de concorrência...
Cara, demais isso!!!
Edição feita por: horacio2009, 11/01/2011, 14:37.
http://www.iconsorciofiat.com.br.
#8
Posted 11/01/2011, 14:45
- horacio2009 likes this
#9
Posted 15/01/2011, 07:36
Só confirmando...
eu fiz dessa forma:
$tab=mysql_query("START TRANSACTION");
$tab=mysql_query("UPDATE controle_clientes SET situacao='$status',acompanhamento='$email', atualizacao='$data' WHERE id_vendas='$cliente'");
$tab=mysql_query("COMMIT");
tá certo, assim, né?
No mais, muito obrigado pela força!!!
http://www.iconsorciofiat.com.br.
#10
Posted 15/01/2011, 11:03
Suponha que eu esteja fazendo uma loja. Na hora de vender o produto, eu preciso ver se ele está no estoque antes de bater o martelo.
mysql_query("SET ISOLATION LEVEL SERIALIZABLE"); // ver http://dev.mysql.com...-isolation.html
mysql_query("START TRANSACTION");
$query = mysql_query("SELECT qtd FROM produtos WHERE id=$id FOR UPDATE"); // aqui selecionei o produto e travei o registro
// confiro se ele está disponível e qualquer outra coisa pertinente
...
if($pode_vender){
mysql_query('INSERT INTO vendas...'); // faço a venda
mysql_query('UPDATE produtos SET qtd=qtd-1 WHERE id=$id');
}
mysql_query("COMMIT"); // confirmo tudo e destravo o registro
Nesta situação o uso de transação se aplica porque em um sistema com uso intenso, imagine que só tenha 1 produto restante. E duas pessoas tentam comprar praticamente no mesmo instante. Nesta situação, os dois SELECTs acontecem também praticamente no mesmo instante. Assim, o código das duas pessoas vai ler qtd=1 e as vendas serão feitas. Então usamos a transação para travar o registro. Assim, o primeiro que executar o SELECT trava o registro e impede que a segunda pessoa consiga comprar.
- horacio2009 likes this
#11
Posted 20/01/2011, 08:43
vi que o código postado "mysql_query("SET ISOLATION LEVEL SERIALIZABLE"); // ver http://dev.mysql.com...isolation.html" é essa a linha que faz o bloqueio do registro???
Se sim, qual a função do "mysql_query("START TRANSACTION");"?
achei que era essa que travava...
http://www.iconsorciofiat.com.br.
#13
Posted 15/09/2017, 13:33
Buy Keflex Online cialis Propecia With Minoxidil Nisim Viagra Cialis Naturale Zithromax Z Pak Dosage cialis buy online Dapoxetina Para La Eyaculacion Precoz
#14
Posted 04/10/2017, 09:10
#15
Posted 05/10/2017, 01:41
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)