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
- 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. - 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.
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?