Transações – COMMIT e ROLLBACK no SQL Server

COMMIT e ROLLBACK no SQL Server

Neste artigo mostraremos como realizar as operações de commit e rollback em transações no SQL Server. Antes, vejamos uma breve explicação sobre esses termos.

Transação

Chamamos de Transação, em bancos de dados, a um conjunto de uma ou mais operações que constituem uma única tarefa ou unidade lógica de trabalho a ser processada.

Os sistemas de bancos de dados devem garantir a execução correta das transações, mesmo que venham a ocorrer falhas; a transação deve executada por completo (incluindo todas as operações) ou então nenhuma de suas operações deve ser executada (a transação é abortada).

A transação é a propagação de alterações para o banco de dados, como por exemplo a alteração ou exclusão de registros em uma tabela.

Operações COMMIT e ROLLBACK

Se um transação for concluída com sucesso (todas as operações bem-sucedidas), o banco de dados será alterado permanentemente, com os dados alterados persistidos (salvos em disco); essa operação é chamada de COMMIT.

Porém, se houver falha em qualquer uma das operações que compõem a transação, o banco deverá ser retornado ao estado anterior ao início da transação; chamamos a essa operação de ROLLBACK.

Assim, podemos caracterizar as transações da seguinte forma:

  • Todas as transações possuem início e fim
  • As transações podem ser salvas (consolidadas no banco de dados) ou desfeitas
  • Caso uma transação falhe no meio da execução de suas operações, nenhuma das operações será salva no banco de dados – todas serão desfeitas. 

No SQL Server, iniciamos uma transação com a declaração BEGIN TRANSACTION, e finalizamos o bloco que compõe a transação com as declarações COMMIT TRANSACTION ou ROLLBACK TRANSACTION, dependendo do estado que se deseja alcançar – salvar ou desfazer as operações, respectivamente.

Vamos a um exemplo.

Exemplo

No exemplo a seguir criamos uma tabela para testes de nome Livro_ISBN, com dados oriundos da tabela de livros que usamos em nosso curso de SQL Server. Logo após, experimentamos realizar duas transações: uma com rollback, desfazendo a transação, e outra com commit, confirmando a transação e alterando definitivamente os dados no banco.

Os comentários explicam o que acontece em cada exemplo:

-- criar tabela para testes
SELECT Nome_Livro,ISBN
INTO Livro_ISBN
FROM tbl_livros;

-- transação com rollback
BEGIN TRANSACTION
  DELETE FROM Livro_ISBN -- apaga todos registros da tabela, "sem querer"
  SELECT * FROM Livro_ISBN -- mostra tabela vazia
ROLLBACK TRANSACTION; -- desfaz a transação
SELECT * FROM Livro_ISBN; -- mostra os dados normalmente

-- transação com commit
BEGIN TRANSACTION
  DELETE FROM Livro_ISBN -- apaga todos registros da tabela
  SELECT * FROM Livro_ISBN -- mostra tabela vazia
COMMIT TRANSACTION; -- confirma a transação
SELECT * FROM Livro_ISBN; -- agora mostra a tabela vazia em definitivo

Além de podermos trabalhar com commit e rollback, também é possível criarmos pontos de salvamento para as transações. Abordaremos os pontos de salvamento no SQL Server no próximo artigo sobre transações.

Perguntas e Respostas

  1. Quais comandos podem ser controlados por transações no SQL Server?
    Em transações colocamos os comandos DML, que causam alterações nos dados armazenados nas tabelas. São eles: insert, update e delete.
  2. Qual a diferença entre COMMIT e ROLLBACK?
    COMMIT consolida a transação, ou seja, executa os comandos em definitivo. Já o ROLLBACK desfaz a transação inteira – nenhuma declaração SQL contida na transação é executada.

 

Sobre Fábio dos Reis (1206 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

1 Comentário em Transações – COMMIT e ROLLBACK no SQL Server

  1. Boa tarde, seu inicio um processo em que atualizo um campo com TRUE e começo a fazer as atualizações, validações que tenho que fazer. A pergunta é a seguinte, se outro processo de outro usuário chegar, ele enxerga o valor como TRUE ou FALSE, sendo que o valor que estava no banco é FALSE e quando primeiro e iniciei os meus trabalhos. Como fica?

Escreva um comentário

Seu e-mail não será divulgado


*