ACID: BEGIN TRANSACTION, COMMIT e ROLLBACK
- Amanda Nascimento
- 30 de mai. de 2023
- 4 min de leitura
Atualizado: 7 de ago.
No SQL Server (e em outros SGBDs), usamos transações para garantir que um conjunto de operações ocorra de forma atômica — ou seja, tudo ou nada. Se alguma parte falhar, podemos reverter tudo.
🔄 O que é uma Transação?
É um bloco lógico de instruções SQL que devem ser executadas como uma única unidade de trabalho.
🎯 Finalidade principal:
Garantir consistência dos dados.
Evitar dados corrompidos em caso de falha parcial.
Permitir controle total sobre o que será salvo no banco.
✅ Quando Usar Transações?
Ao fazer múltiplas alterações que devem ser executadas em conjunto.
Ao depender de validações manuais ou verificações antes de confirmar as mudanças.
Em cenários críticos, como movimentações financeiras ou exclusões em cascata.
🔐 ACID: As Propriedades das Transações
Transações seguem o princípio ACID:
Letra | Nome | Descrição |
A | Atomicidade | Tudo ou nada é executado |
C | Consistência | Os dados permanecem íntegros antes e depois da transação |
I | Isolamento | Transações não interferem entre si |
D | Durabilidade | Depois do COMMIT, os dados persistem mesmo após falhas do sistema |
Estrutura
BEGIN TRANSACTION;
-- suas operações aqui (INSERT, UPDATE, DELETE, etc.)
-- se tudo estiver certo:
COMMIT;
-- se houver erro ou desistência:
ROLLBACK;
Exemplo para alterar dado em um banco relacional sql server:

1º passo (criar uma consulta que apareça apenas os dados que deseja alterar)
A primeira coisa é ter certeza do dado que você quer alterar, para isso, utilize o where para garantir que o que será alterado, será somente o que você realmente precise que seja alterado.
Neste exemplo, dei um select na tabela que quero para estudar os dados e montar meu where que será baseado em duas colunas SECAODESATIVADA ser igual a 0 que significa neste caso que esta ativo, e na coluna CODIGO, os dados que quero alterar necessariamente precisam começar com 0.098.
Assim, vi que neste exemplo serão 74 linhas retornadas na consulta abaixo:
SELECT *
FROM PSECAO
WHERE SECAODESATIVADA = 0
AND CODIGO LIKE '0.098%'
2º passo
Recomendo realizar a alteração primeiro no banco de testes e depois no de produção conforme exemplificado na imagem acima.
Primeira etapa é selecionar apenas a palavra BEGIN TRAN e executar (F5)
Irá aparecer uma mensagem se a conexão para alteração tiver se estabelecido: "Commands completed successfully."
Usamos o BEGIN TRAN para abrir uma conexão de alteração com o banco, ou seja, o banco fica aguardando nos próximos instantes a alteração de dados. (Quem estiver com alguma consulta rodando, funcionará normalmente).
3º passo: "UPDATE" "SET" até o "WHERE" e executar (F5)
A alteração será realizada.
4º passo: digite select * from where para ver se de fato os dados foram alterados como era esperado, se sim, COMMIT para gravar os dados em definitivo no banco.

Para prosseguir com a alteração após executar o UPDATE, execute o COMMIT e aguarde a mensagem de confirmação conforme imagem acima.
Ao executar o COMMIT, não é possível voltar atrás, os dados selecionados no where serão alterados e automaticamente o COMMIT fecha a conexão de alteração estabelecida.
Para retornar (CTRL + Z) execute ROLLBACK pois além de retornar para os dados que estavam, ele também serve para fechar a conexão que abrimos com o BEGIN TRAN.
É necessário realizar o fechamento da conexão de alteração estabelecida para melhor funcionamento do banco.
Exemplos
🔌Aqui, você executa a transação, confere se a inserção foi correta, e então decide entre COMMIT ou ROLLBACK:
--Exemplo 1: Inserção com confirmação manual
BEGIN TRANSACTION;
INSERT INTO funcionarios (nome, idade, RecCreatedBy)
VALUES ('Carlos', 30, SUSER_SNAME());
-- Verifique se deu tudo certo...
-- Se sim, salve:
COMMIT;
-- Se não, cancele:
-- ROLLBACK;
🔌O ROLLBACK reverte tudo o que foi feito desde o BEGIN TRANSACTION, deixando a tabela como estava antes da transação:
--Exemplo 2: Atualização com erro simulado
BEGIN TRANSACTION;
UPDATE funcionarios
SET idade = 99
WHERE nome = 'Amanda';
-- Ops! Atualizou o valor errado. Vamos desfazer:
ROLLBACK;
🔌Se a segunda INSERT falhar, nenhuma das duas deve ser aplicada. Por isso, esse uso com transação garante que ambas aconteçam juntas.
--Exemplo 3: Inserções em múltiplas tabelas
BEGIN TRANSACTION;
INSERT INTO funcionarios (nome, idade, RecCreatedBy)
VALUES ('João', 25, SUSER_SNAME());
INSERT INTO historico_auditoria (descricao, data)
VALUES ('Novo funcionário inserido: João', GETDATE());
COMMIT;
🔌Neste modelo, usamos TRY...CATCH para capturar erros. Se ocorrer um erro, ele executa ROLLBACK e mostra a mensagem.
--Exemplo com TRY...CATCH para controle de erros
BEGIN TRY
BEGIN TRANSACTION;
-- Operações
UPDATE funcionarios
SET idade = idade + 1;
-- Simulando erro
-- SELECT 1 / 0;
COMMIT;
END TRY
BEGIN CATCH
ROLLBACK;
PRINT 'Erro: ' + ERROR_MESSAGE();
END CATCH;