
Hoje tive que fazer um trabalho em sistemas distribuídos e que representasse alguma coisa sobre confiabilidade, atomicidade etc...
Resolvi utilizar transações em banco de dados... e não é que o troço funciona mesmo!?!?!
hauhauhaua :P
Explicando...
Transações:
Um bloco de transação inicia-se com a declaração SQL BEGIN e, se a transação for válida, termina com COMMIT ou END. Se a transação falhar, ela deve ser fechada com ROLLBACK ou ABORT.
Geralmente se usa transações quando se faz necessário que todas as query's dentro do bloco da transação sejam executadas em conjunto e que não existam falhas...ou seja... caso exista uma falha a transação que finaliza com
Rollback desfaz a execução das query's que estão no bloco. Caso todas sejam executadas sem problemas daí o
commit se encarrega de finalizar as execuções com atomicidade e sucesso! ;)
OBS.: Agradecimentos ao
Edgar Gabaldi que me deu a dica de como fazer o html se comportar no blog... hehehe
Exemplo resumido:
começa assim
//iniciando a transação
pg_query ($conexao_do_banco, "begin");
//aqui você coloca as query's que você quer que execute em conjunto...
$query=("select * from tabela");
$execute=pg_exec($conexa_do_banco,$query);
$query_dois=("select * from tabela2");
$execute_dois=pg_exec($conexa_do_banco,$query_dois);
$query_tres=("insert into tabela2 valor=$valor");
$execute_tres=pg_exec($conexa_do_banco,$query_tres);
if(($execute)&&($execute_dois)&&($execute_tres)){
pg_query ($conexao_do_banco, "commit");
print "depositado com sucesso";
}else{
pg_query ($conexao_do_banco, "rollback");
pg_close($conexao_do_banco);
print "Ops! Problemas!";
}
Como você pode ver se todas as execuções forem executadas com sucesso então "commit" é executado senão executa "rollback" e nenhuma das query's dentro do bloco são finalizadas ou concretizadas...
Espero que ajude alguém ;)
Banco de dados é divertido!
P.S.: Passei com A na Banca =D
Mas ainda tenho 2 provas pela frente... =/