O que são Transações ACID?

Atualizado em: agosto de 2026

Uma transação ACID é um grupo de operações de banco de dados que faz commit como uma única unidade — atômica, consistente, isolada e durável. A ideia é anterior ao acrônimo: Jim Gray definiu as garantias em 1981, Härder e Reuter as batizaram de ACID em 1983, e quarenta anos depois ela segue sendo o contrato que permite mover dinheiro em software sem, de vez em quando, inventar ou destruir uma parte dele.

Principais pontos

PerguntaResposta
As quatro letrasAtômica (tudo-ou-nada) · Consistente (as regras valem) · Isolada (sem interferência) · Durável (sobrevive a quedas)
Exemplo canônicoA transferência bancária: débito + crédito fazem commit juntos ou nenhum dos dois faz
O botão de ajusteNíveis de isolamento — desempenho trocado por anomalias de leitura
O rivalBASE / consistência eventual — disponibilidade trocada por desatualização
A realidade modernaBancos de documentos também fazem ACID; a letra miúda é o escopo

Como transações ACID funcionam em SQL (exemplo de transferência bancária)

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 'alice';
UPDATE accounts SET balance = balance + 100 WHERE id = 'bob';

-- Queda ou erro entre os dois updates? A engine faz rollback:
-- ROLLBACK;  →  as duas mudanças somem; dinheiro não pode evaporar

COMMIT;       -- ou as duas se tornam permanentes, de forma atômica e durável

O código de aplicação encontra as mesmas garantias em pacotes menores — operações atômicas de campo que encerram a corrida de read-modify-write, e lotes que fazem commit juntos:

// JavaScript / Node.js — Back4app JS SDK
// Atomicity where apps actually need it
counter.increment('sold', 1);        // atomic single-field update — no
await counter.save();                // read-modify-write race possible

// All-or-nothing batch: both rows commit, or neither does
await Parse.Object.saveAll([debitEntry, creditEntry], { transaction: true });

O ciclo de vida da transação: BEGIN, COMMIT e ROLLBACK

Ciclo de vida da transaçãoUma transação começa, executa operações contra um estado de trabalho e ou faz commit — tornando todas as mudanças permanentes — ou faz rollback em qualquer falha, restaurando o estado válido anterior.

todas têm sucesso

qualquer falha

BEGIN

Operações
leituras + escritas, isoladas

COMMIT
permanente, durável

ROLLBACK
como se nada tivesse acontecido

Uma transação começa, executa operações contra um estado de trabalho e ou faz commit — tornando todas as mudanças permanentes — ou faz rollback em qualquer falha, restaurando o estado válido anterior.

As quatro propriedades, cada uma pelo que quebra sem ela: atomicidade — sem ela, escritas parciais (a transferência debitada-mas-nunca-creditada). Consistência — sem ela, estados commitados que violam as suas próprias regras (estoque negativo, referências órfãs). Isolamento — sem ele, transações concorrentes leem o trabalho pela metade umas das outras. Durabilidade — sem ela, dados “commitados” que uma queda silenciosamente desfaz. Por baixo do capô, três mecanismos as entregam: logs de undo para o rollback, write-ahead logging para sobreviver a quedas e locks ou MVCC para a concorrência.

Níveis de isolamento vs. anomalias de leitura

A matriz que quase nenhum resultado de busca monta — qual nível impede qual anomalia:

NívelDirty readNon-repeatable readPhantom readCusto
Read uncommittedpossívelpossívelpossívelo menor
Read committedprevenidopossívelpossívelbaixo
Repeatable readprevenidoprevenidopossívelmédio
Serializableprevenidoprevenidoprevenidoo maior

Traduzindo: um dirty read enxerga trabalho não commitado; um non-repeatable read recebe respostas diferentes ao perguntar duas vezes; um phantom vê linhas surgirem no meio da transação. A maioria das engines modernas usa por padrão comportamento de snapshot baseado em MVCC — cada transação lê um snapshot consistente enquanto os escritores prosseguem — e é por isso que “leitores não bloqueiam escritores” virou a norma, não a exceção.

ACID vs. BASE — e o homônimo da consistência

DimensãoACIDBASE
Otimiza paraCorreção por transaçãoDisponibilidade em escala
ConsistênciaImediata, preservando as regrasEventual
Habitat naturalDinheiro, estoque, reservasFeeds, contadores, caches
Postura de escalaLimitada pela coordenaçãoHorizontal por design
Modo de falhaMais lenta sob contençãoLeituras temporariamente desatualizadas

Uma desambiguação carrega toda essa comparação: o C de ACID e o C de CAP são palavras diferentes vestindo a mesma letra. Consistência em ACID significa que cada transação preserva as regras que você declarou. Consistência em CAP significa que todos os nós concordam agora. Um banco de nó único é totalmente ACID sem que o CAP entre na sala; um sistema distribuído escolhe o seu trade-off de CAP e as suas garantias transacionais separadamente.

Quem garante o quê

Família de engineHistória com ACID
PostgreSQLACID completo, MVCC, serializable disponível
MySQLACID completo com InnoDB — a escolha da engine importa
SQLiteACID completo, escritor único, modo WAL
MongoDBAtomicidade de documento único sempre; transações multi-documento desde a 4.0 (2018), isolamento por snapshot
Engines SQL distribuídasACID via replicação por consenso — serializable a preço de rede
Stores wide-column / eventuaisAjustável, parcial — BASE por design

Transações distribuídas merecem sua nota de rodapé honesta: o commit em duas fases (two-phase commit) compra atomicidade entre nós ao preço de latência e de um coordenador bloqueante, razão pela qual arquiteturas de microsserviços preferem cada vez mais as sagas — sequências de transações locais com rollbacks compensatórios, trocando consistência imediata por disponibilidade. Se um workflow genuinamente não tolera compensação, isso é evidência de que ele pertence a um único banco de dados, não a vários.

Casos de uso comuns

  • Movimentação de dinheiro. Transferências, repasses, livros-razão — o caso canônico e ainda o mais claro.
  • Estoque e reservas. Decrementar o estoque e confirmar o pedido juntos, ou assistir a dois clientes comprarem o último assento.
  • Invariantes de múltiplas linhas. Pedido + itens, conta + registro de auditoria — registros que só nascem válidos juntos.
  • Contadores do jeito certo. Incrementos atômicos — a menor dose útil de ACID — encerram a corrida de read-modify-write sem transações completas.
  • O complemento de consistência eventual. Feeds, curtidas, analytics: explicitamente roteados para longe do custo transacional, de propósito.

Precisa ser ACID? Matriz de decisão

Exija transações completas quando…Consistência eventual basta quando…
Dinheiro ou propriedade troca de mãosUm contador desatualizado não custa nada
Escritas parciais criam estados inválidosCada escrita é válida por si só
Reguladores vão cobrar a invarianteO dado é derivado e reconstruível
Duas linhas precisam concordar, sempreConvergir depois é uma UX aceitável
Vender além do estoque é processoContar a mais é dar de ombros

O ofício é rotear por escrita: o checkout usa transações, o contador de visualizações usa um incremento atômico, o feed tolera um segundo de deriva — uma aplicação, três faixas de preço para a consistência.

Limitações e trade-offs

  • A coordenação é o centro de custo. Locks disputam, syncs de WAL batem no disco, retries de serializable abortam — a correção tem uma conta de throughput, e essa é a razão inteira de o BASE existir.
  • Níveis de isolamento são um padrão traiçoeiro. A maioria das engines não usa serializable por padrão; conheça o seu nível, ou anomalias que você achava impossíveis são apenas improváveis.
  • Transações longas são um mau sinal. Segurar locks durante o tempo de decisão do usuário ou chamadas de rede transforma garantias em contenção; mantenha transações curtas e decididas.
  • ACID distribuído é caro por natureza. Rodadas de consenso a cada commit — pague onde as invariantes exigem, não em todo lugar por reflexo.
  • ACID não valida as suas regras por você. A consistência preserva constraints declaradas; regras de negócio nunca codificadas são fielmente não aplicadas.

Transações ACID no Back4app

O Back4app é uma plataforma open-source de Backend as a Service (BaaS) que combina banco de dados gerenciado, APIs REST e GraphQL geradas automaticamente, autenticação, armazenamento de arquivos e funções serverless com Cloud Code. Seu kit transacional corresponde a como os apps realmente consomem ACID: toda escrita de objeto único é atômica na engine de documentos subjacente, incrementos atômicos e operações de array encerram as clássicas corridas de contador (as abas de código acima), saves em lote agrupam escritas, e invariantes de múltiplas etapas pertencem ao Cloud Code — validadas e executadas no servidor, onde um trigger beforeSave pode recusar qualquer escrita que quebraria as regras. A matriz de decisão vem de fábrica: atomicidade barata por padrão, coordenação completa onde você pedir.

Perguntas frequentes

O que significa a sigla ACID?

Atomicidade, Consistência, Isolamento e Durabilidade — as quatro garantias que uma transação de banco de dados precisa dar para os dados continuarem corretos através de erros, quedas e usuários concorrentes. Jim Gray definiu as propriedades centrais em 1981; Theo Härder e Andreas Reuter cunharam o acrônimo em seu artigo de 1983 sobre recuperação orientada a transações.

O que é uma transação ACID em termos simples?

Um grupo de leituras e escritas executado como uma unidade de tudo-ou-nada. Ou toda operação faz commit e se torna permanente, ou toda operação sofre rollback como se nada tivesse acontecido. O exemplo canônico é a transferência de dinheiro: debitar uma conta, creditar outra — uma queda entre as duas jamais pode deixar o dinheiro debitado mas não creditado.

O que são níveis de isolamento?

O botão que troca desempenho por proteção quando transações rodam concorrentemente. O padrão SQL define quatro — read uncommitted, read committed, repeatable read, serializable — cada um prevenindo mais anomalias (dirty reads, non-repeatable reads, phantoms) a um custo maior. Na prática, a maioria das engines modernas usa por padrão isolamento estilo snapshot via MVCC, em que leitores veem um snapshot consistente e nunca bloqueiam escritores.

Qual é a diferença entre ACID e BASE?

Duas respostas ao custo da correção. ACID paga em coordenação para garantir que toda transação veja e deixe um estado válido. BASE — Basically Available, Soft state, Eventually consistent — paga em desatualização temporária para permanecer disponível e escalar horizontalmente. Nenhum é superior; eles precificam a consistência de formas diferentes, e sistemas reais misturam os dois conforme a carga de trabalho.

Consistência em ACID é o mesmo que consistência no teorema CAP?

Não — e confundi-las é o equívoco mais comum sobre o tema. Consistência em ACID significa que cada transação preserva as regras declaradas: constraints valem, invariantes sobrevivem. Consistência em CAP significa que todo nó de um sistema distribuído vê os mesmos dados ao mesmo tempo. Um banco de nó único pode ser totalmente ACID sem que o CAP tenha algo a dizer sobre ele.

Bancos NoSQL são compatíveis com ACID?

Cada vez mais, com letras miúdas. Bancos de documentos sempre tornaram atômicas as escritas em um único documento — o que, combinado a embutir os dados relacionados, cobre a maioria das necessidades de um app. Transações ACID multi-documento chegaram no MongoDB 4.0 (2018) com isolamento por snapshot, a um custo real de desempenho. A velha alegação de que "NoSQL não tem transações" está simplesmente desatualizada; a preferência de design por modelar em torno da atomicidade de documento único, não.

Como os bancos de dados implementam ACID na prática?

Três mecanismos carregam o peso: informação de undo torna o rollback possível (atomicidade); write-ahead logging — mudanças registradas num log durável antes de serem aplicadas — sobrevive a quedas (durabilidade); e locks ou MVCC mantêm transações concorrentes fora do caminho umas das outras (isolamento). A consistência é o resultado: constraints verificadas sob a proteção das outras três.

Quando consistência eventual é suficiente?

Quando uma breve janela de desatualização não custa nada: curtidas, contadores de visualização, feeds de atividade, analytics, caches, recomendações de produto. Quando não é: dinheiro, estoque que pode vender além do limite, reserva de assentos e ingressos, qualquer coisa regulada. A habilidade de engenharia não é escolher um lado, e sim rotear cada escrita para a garantia de que ela realmente precisa.

Termos relacionados

Compare com

Leitura adicional

Pronto para construir seu backend?

Comece seu projeto no Back4app em minutos — banco de dados, autenticação, APIs e Cloud Code incluídos. Sem cartão de crédito.

Escrito e revisado por Back4app Engineering, Back4app Engineering · Publicado em 2026-08-20