Ramos da InformáticaBanco de DadosTransações SQL e Propriedades ACID: O Guia

Transações SQL e Propriedades ACID: O Guia

-

Ramos da Informática
JS TS IA

Pesquisa: Como você está usando IA na sua rotina Dev?

Responda em menos de 2 minutos e ajude a direcionar nossos próximos artigos técnicos, guias e conteúdos.

Responder Pesquisa →

Bancos de dados SQL em geral, não somente o o SQL Server, são transacionais, isto é, eles permitem você executar uma sequência de operações como um bloco indivisível de forma a garantir a integridade dos dados em um ambiente com acesso concorrente.

Em outras palavras uma Transação, ou Transactions, é o processo todo de consulta ou manipulação do banco de dados. É uma forma de estabelecer que algo deva ser feito atomicamente, ou seja, ou faz tudo ou faz nada, não pode fazer pela metade. É tudo feito em uma viagem da aplicação para o banco de dados. Em condições normais enquanto a transação não termina outras transações não podem ver o que esta está fazendo.

Esses 3 comandos SQL são para controlar isso.

Dica de Leitura: Se você está explorando o mundo das transações em bancos de dados SQL, é natural se perguntar sobre outras formas de manipular e consultar dados de maneira eficiente. Uma área interessante para explorar é a diferença entre funções e procedures, tanto em Node.js quanto em SQL, pois entender esses conceitos pode aprimorar significativamente a sua capacidade de desenvolver soluções robustas e escaláveis. Para mergulhar mais fundo nessa distinção, confira o artigo SQL – Diferenças Entre Funções e Procedures, que oferece insights valiosos sobre como esses elementos podem ser utilizados para melhorar a performance e a organização do seu código.

O BEGIN TRANSACTION indica onde ela deve começar, então os comando SQL a seguir estarão dentro desta transação.

O COMMIT TRANSACTION indica o fim normal da transação, o que tiver de comando depois já não fará parte desta transação. Neste momento tudo o que foi manipulado passa fazer parte do banco de dados normalmente e operações diversas passam enxergar o que foi feito.

O ROLLBACK TRANSACTION também fecha o bloco da transação e é a indicação que a transação deve ser terminada, mas tudo que tentou ser feito deve ser descartado porque alguma coisa errada aconteceu e ela não pode terminar normalmente. Nada realizado dentro dela será perdurado no banco de dados.

Ao contrário do que muita gente acredita rollback no contexto de banco de dados não significa reverter e sim voltar ao estado original. Um processo de reversão seria de complicadíssimo à impossível. Um processo de descarte é simples e pode ser atômico.

A maioria dos comandos SQL são transacionais implicitamente, ou seja, ele por si só já é uma transação. Você só precisa usar esses comandos citados quando precisa usar múltiplos comandos e todos esses devam rodar atomicamente. Ou seja, eles funcionam como as chaves de um código, eles criam um bloco. Na verdade está mais para o using do C# já que há uma consequência garantida no final da execução.

CREATE TABLE ValueTable (id int);  
BEGIN TRANSACTION;              -- aqui começa a transação
       INSERT INTO ValueTable VALUES(1);  
       INSERT INTO ValueTable VALUES(2);  
COMMIT;                         -- aqui termina e "grava" tudo

Enquanto não dá o COMMIT essas inserções não constam de fato no banco de dados. Um ROLLBACK descartaria tudo feito antes.

A documentação tem mais informações e o assunto é interessante, pena não ter mais perguntas sobre isto.

Para melhor compreensão é preciso entender o que é o ACID.

O que é o ACID no SQL?

A sigla ACID significa:

  1. Atomicidade É algo indivisível. Ou tudo o que está em uma transação deve ser realizado com sucesso, ou nada deve ser realizado. Pelo menos nada deva ser considerado como realizado. Sem a atomicidade fica difícil se não impossível manter as outras características, por isso a transação é importante.
  2. Consistência O banco de dados deve ter uma transação terminada em estado consistente, ou seja, deve respeitar todas as regras impostas no banco de dados para todos os envolvidos na transação.
  3. Isolamento Uma transação não pode interferir em outra enquanto está em atividade. Só após sua conclusão é que o seu resultado ficará disponível para outras transações.
  4. Durabilidade Ao final da transação o resultado deve permanecer no banco de dado, aconteça o que acontecer.
Curso Banco de Dados

 

Sem essas características o banco de dados não é confiável. Uma operação pode terminar pela metade, ou pode estar em um estado que causará problemas, ou manipulará dados que ainda não se sabe se serão úteis ou finais ou ainda pode perder o que foi feito.

Alguns bancos de dados se dizem ACID quando na verdade são apenas quase ACID 🙂 Eles são ACID, pero no mucho, tem alguns casos que eles não garantem isso, ou seja eles dizem que estão mais ou menos grávidos 🙂

O conceito é implementado para evitar condições de corrida e problemas semelhantes. No link tem um exemplo de conta bancária que é o clássico problema.

  1. Se você precisa atualizar o saldo de uma conta precisa garantir que tudo o que é feito para mudar o saldo deve ser realizado até o fim, não pode mudar em uma tabela e não mudar em outra, não pode debitar em uma conta e deixar de debitar em outra (atomicidade).
  2. No final da transação não pode deixar o saldo com um valor que foi determinado que não seja permitido, por exemplo: saldo normal mais limite ser negativo, ou o saldo não ter uma operação vinculada a ele (consistência).
  3. Não pode deixar outras transações verem o crédito até que se conclua, já que a transação pode não dar certo ou pode ser que durante ela também tenha outros créditos ou débitos que afetarão o resultado final (isolamento).
  4. Não pode deixar de manter o novo valor do saldo e tudo o que foi realizado para se chegar nele (durabilidade).

Normalmente isto é obtido por um sistema de journaling, write ahead log ou alguma forma semelhante. É importante que as operações da transação sejam feitas fora do acesso normal do banco de dados e só entre no seu final. As técnicas mais utilizadas são two phase locking, multi version concurrency control e snapshot isolation.

english-interview-debugger.sh
$ grep -r "senior_dev_communication" ./career
[CRITICAL_ERROR] Código sênior detectado, mas fluência falhou no runtime.
Motivo: Travou na hora de explicar a arquitetura (System Design) em inglês para o gringo.

O mercado internacional não quer um robô de gramática. Quer um dev que saiba defender uma tomada de decisão técnica sob pressão. Destrave sua conversão na Preply com aulas particulares focadas em TI.

$ ./fix-english.sh --target=remote-job
Achar Professor Particular ➔

Artigo da Wikipedia.

Bancos de dados Relacionais e NoSQL

Os bancos de dados chamados de NoSQL não costumam ser ACID (alguns até são, alguns são parcialmente, ou seja, não são). Os que são não oferecem todas aquelas vantagens que dizem que o NoSQL tem, não existe milagre. Ou eles não são confiáveis. Claro que problemas que o desempenho geral e a distribuição são mais importantes que a confiabilidade da informação então ele é útil. Bancos de dados ACID podem ter melhor desempenho em certos cenários.

Se não souber o que está fazendo o NoSQL pode ser trágico e muito mais lento. NoSQL opta pelo BASE que podemos chamar de oposto do ACID, ainda que não seja bem assim.

Veja sobre o CAP theorem. Ele mostra que não existe milagre. Não acredite em falsos profetas que prometem que vão resolver todos os problemas e quebrar o CAP theorem.

Voltando a falar sobre Transações (Transactions) em SQL

No livro Sistemas de banco de dados, de Elmasri & Navathe, os capítulos 17 a 19 (páginas 395 a 452, 4ª edição) tratam da teoria do processamento de transações. Sobre a pergunta “O que são transações”, o texto informa que “Uma transação inclui uma ou mais operações de acesso ao banco de dados – englobam operações de inserção, exclusão, alteração ou recuperação” e também cita que “Uma transação é uma unidade atômica de trabalho que ou estará completa ou não foi realizada“.

Outra parte de sua pergunta menciona BEGIN TRANSACTION, COMMIT e ROLLBACK: “Um meio para especificar os limites de uma transação é estabelecer explicitamente declarações de início de transação e fim de transação“. No caso das instruções SQL que citou, BEGIN TRANSACTION refere-se a início da transação e COMMIT ao final da transação.

Ao utilizar o par BEGIN TRANSACTION/COMMIT definem-se os limites da transação: “… todas as operações de acesso ao banco de dados, entre as duas, serão consideradas parte da transação“.

Como exemplo, o caso clássico de transferência de valor entre duas contas bancárias. A programação deve ser de tal forma que não seja possível a retirada do valor da conta e, por uma falha qualquer, o processo seja interrompido antes que o valor seja depositado na conta do destinatário.

-- código #1
declare @contaDe char(6), @contaPara char(6), @Valor money;

set @contaDe= '029820';
set @contaPara= '407302';
set @Valor= 1200.00;

BEGIN TRANSACTION;

UPDATE CONTA_CORRENTE
  set saldoConta= saldoConta - @Valor
  where numConta = @contaDe;

UPDATE CONTA_CORRENTE
  set saldoConta= saldoConta + @Valor
  where numConta = @contaPara;

COMMIT;
go

No caso de transferência bancária há vários procedimentos adicionais, mas o objetivo aqui é exemplificar a utilização das instruções BEGIN TRANSACTION e COMMIT.

Já a instrução ROLLBACKreverte uma transação explícita ou implícita ao começo da transação ou a um ponto de salvamento dentro da transação“, conforme consta na documentação da instrução. Geralmente é utilizada quando ocorre algo inesperado no processamento e é necessário então desfazer o processamento realizado na transação.

O conceito de transação está intimamente ligado a concorrência de processos e também às propriedades ACID (atomicidade, consistência, isolamento e durabilidade).

Documentação em português, para SQL Server:

  1. BEGIN TRANSACTION
  2. COMMIT TRANSACTION
  3. ROLLBACK TRANSACTION
  4. SAVE TRANSACTION

LEIA TAMBÉM:

FAQ: Transações ACID no Desenvolvimento de Software

1. O que acontece se o meu servidor (Node.js/Python) cair a meio de uma transação SQL?
+

Graças à regra da Atomicidade (A) do padrão ACID, se a ligação entre a sua API e o banco de dados for cortada antes de ser emitido o comando COMMIT, o banco de dados executará automaticamente um ROLLBACK invisível. Nenhuma inserção parcial será gravada, garantindo que o seu sistema nunca fica num estado inconsistente.

2. Bancos de dados NoSQL (como o MongoDB) suportam transações ACID?
+

Tradicionalmente, os bancos NoSQL seguiam o modelo BASE (focado em disponibilidade e consistência eventual). No entanto, em 2026, a maioria dos grandes bancos NoSQL (incluindo o MongoDB a partir da versão 4.0) já suporta transações ACID multi-documento nativamente. Contudo, utilizar estas transações em ambientes distribuídos NoSQL tem um custo significativo de performance em comparação com bancos relacionais como o PostgreSQL.

3. Como gerir transações ao utilizar ORMs (como Prisma ou TypeORM)?
+

Em projetos modernos, raramente escrevemos BEGIN TRANSACTION à mão. Os ORMs fornecem métodos embutidos (como o $transaction no Prisma) que englobam múltiplas Promises (consultas). Se qualquer uma dessas Promises falhar (lançar um erro), o ORM cuida de acionar o ROLLBACK internamente e devolve a exceção para ser tratada no seu bloco try/catch.

Ramos da Informática
JS TS IA

Pesquisa: Como você está usando IA na sua rotina Dev?

Responda em menos de 2 minutos e ajude a direcionar nossos próximos artigos técnicos, guias e conteúdos.

Responder Pesquisa →
Ramos da Informática
Ramos da Informáticahttps://ramosdainformatica.com.br
Ramos da Informática é um hub de comunidade dedicado a linguagens de programação, banco de dados, DevOps, Internet das Coisas (IoT), tecnologias da Indústria 4.0, cibersegurança e startups. Com curadoria de conteúdos de qualidade, o projeto é mantido por Ramos de Souza Janones.

Mais recentes

NVIDIA Lança Cosmos 3: Nova Plataforma de IA Física para Robôs Humanoides e Fábricas Inteligentes

NVIDIA apresenta plataforma full-stack para robôs humanoides, robotáxis e fábricas inteligentes Cosmos 3, robôs humanoides e ferramentas para robotáxis são...

Repositórios e Skills Essenciais para Claude Code, Cursor e Codex

Se você já integrou o Claude Code, Cursor ou Codex no seu fluxo de trabalho, sabe que o jogo...

17 Ferramentas No-Code para Validar Seu Negócio

No mundo dos negócios, construir um Produto Mínimo Viável (MVP) não pode ser sinônimo de queimar o caixa da...

Extensões PostgreSQL: Substitua Redis, MongoDB e Kafka com SQL

Dominar as extensões PostgreSQL deixou de ser apenas uma opção para se tornar a principal estratégia de arquitetura em...
E-Zine Dev

Evolua para Sênior

Estratégias de Node.js, arquitetura Limpa e IA que nunca publicamos no blog. Junte-se a +10.000 devs.

Assinar Gratuitamente Zero spam. Cancele quando quiser.

State of AI 2026: A Maturidade da Inteligência Artificial

A inteligência artificial deixou definitivamente o território das experimentações e se consolidou como uma peça de infraestrutura fundamental no...

Construindo um Servidor MCP Personalizado com Node.js

Um guia prático para construir seu próprio servidor MCP para enriquecer as respostas de ferramentas de IA com contexto...

Mais Lidos

Google Home Vulnerabilidade: Como Proteger

Recentemente, um pesquisador descobriu que um bug do Google...

Evolução pessoal com IA: prompt para planejar sua próxima versão

Evolução pessoal com IA: descubra como usar um prompt...

Livros de Arquitetura de Software: A Biblioteca do Dev Sênior

A transição de um desenvolvedor Pleno para Sênior raramente...

Automação Residencial com Webhooks e APIs: Para Geeks e Devs

Para a maioria das pessoas, ter uma "casa inteligente"...
E-Zine Dev

Evolua para Sênior

Estratégias de Node.js, arquitetura Limpa e IA que nunca publicamos no blog. Junte-se a +10.000 devs.

Assinar Gratuitamente Zero spam. Cancele quando quiser.

Recursos da Comunidade

Carreira Internacional

JOB NA GRINGA

Meta de Salário Remoto
U$ 5.000/mês

O mapa completo para programadores do Brasil conquistarem contratos internacionais e mudarem de vida financeira.

  • Vagas exclusivas semanais: Membros acessam vagas com 7 dias de antecedência.
  • Workshops e lives gravadas: Buscar vagas não é óbvio. Nós te mostraremos como.
  • 498 Portais de vagas: Que contratam Brasileiros direto na sua dashboard.
  • Mentorias com Recrutadores: Encontros semanais ao vivo com Erika Linares.
  • Inglês diário com foco em conversação: Treine para entrevistas num ambiente sem julgamentos.
  • Suporte pós-contratação: Contabilidade e recebimento legal com a menor taxa.
Garantir Minha Vaga

Inscrição segura via Hotmart

Você vai gostarrelacionados
Continue aprendendo

E-Zine Dev Ramos

Quer dominar arquitetura e IA?

Junte-se a +10.000 profissionais. Receba semanalmente estratégias de Node.js, React e IA que nunca publicamos no blog.

Assinar Gratuitamente Zero spam. Cancele quando quiser.