Transações SQL SERVER - BEGIN, COMMIT e ROLLBACK

Entenda as transações na prática, utilizando os bloqueios e os níveis de isolamento para garantir a segurança das informações.


A transação tem por objetivo preservar a integridade e a consistência dos dados. A utilização da transação permite testar a execução dos comandos, verificar as alterações e depois confirmar ou desfazer em caso de erros. Assim, facilita manter a consistência das informações e evita perda de tempo (em caso de erro). Ela faz com que os registros sejam bloqueados para garantir a integridade das informações que possam estar em uma transação ou não. Os bloqueios são utilizados para não deixar com que vários usuários alterem o mesmo registro e ocorra deadlock.


A sintaxe básica de uma transação é:
Begin Transaction Tran1
--AQUI OS COMANDOS SQL
--Commit --para confirmar/salvar
--Rollback --para cancelar/desfazer


O comando BEGIN inicia os comandos SQL que fazem parte da transação. Os comandos realizados após este comando só são apresentados na sessão do usuário e os resultados não são visualizados pelos demais usuários do banco.

A transação termina com o comando COMMIT, o qual confirma a execução dos comandos SQL e efetiva a transação no banco de dados tornando os resultados visíveis para os demais usuários.

O ROLLBACK aborta a transação que está em andamento! Ele interrompe as alterações que estão sendo feitas impedindo que os dados sejam atualizados no banco de dados.

Ou seja, tanto o COMMIT quanto o ROLLBACK, finalizam a TRAN, o primeiro conclui/executa e o segundo interrompe/cancela.


Exemplo 1:
BEGIN TRANSACTION t1
   UPDATE FROM tabela SET coluna = 1 WHERE  coluna = 0
IF @@ERROR = 0 --se não ocorrer erro salva
   COMMIT
ELSE  --se ocorrer erro cancela a execução
   ROLLBACK
   RAISERROR(5001,16,1,’ERRO NA ALTERACAO DA TABELA’) 
END


Nesse exemplo iniciamos a transação no BEGIN e em caso de erro irá executar o comando ‘ROLLBACK’ para finalizar a transação ou caso não tenha erro irá executar a transação e confirmar a alteração.
Com a função ‘RAISERROR’ podemos personalizar as mensagens de erro o que facilita na hora que precisar dar manutenção.


Exemplo 2:
BEGIN TRAN t2;
   insert into tabela values (1,'teste', current_timestamp);
   insert into tabela values (2,'teste2', current_timestamp);

   SELECT * FROM tabela ;
--COMMIT TRAN t2;
--ROLLBACK TRAN t2;


A utilização da transação contribui bastante para execução de UPDATEs que as vezes são necessários no dia-a-dia. Erros por causa da correria e falta de atenção ocorrem, mas com os comandos de transação podemos verificar os dados alterados com um SELECT antes de confirmar que é realmente aquilo que precisa ser feito.

This is it.






Nenhum comentário:

Postar um comentário