0Pricing
SQL Academy · Aula

Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE

Compare os níveis de isolamento do padrão SQL, a implementação do PostgreSQL e escolha o nível adequado para sua carga de trabalho.

Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

Quatro níveis padrão

O padrão SQL define quatro níveis de isolamento:

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

O PostgreSQL implementa três (READ UNCOMMITTED comporta-se como READ COMMITTED).

READ COMMITTED (padrão do PostgreSQL)

Cada instrução vê os dados confirmados antes do início da instrução. É possível ver instantâneos diferentes dentro de uma única transação.

-- Inside one transaction:
SELECT balance FROM accounts WHERE id = 1;  -- 100
-- meanwhile another tx commits balance=200
SELECT balance FROM accounts WHERE id = 1;  -- 200  (non-repeatable read)

REPEATABLE READ (isolamento por instantâneo)

Vê um instantâneo obtido no início da transação. Ler novamente a mesma linha sempre devolve o mesmo valor. O REPEATABLE READ do PostgreSQL também impede leituras fantasmas.

BEGIN ISOLATION LEVEL REPEATABLE READ;
SELECT balance FROM accounts WHERE id = 1;  -- 100
-- another tx commits balance=200
SELECT balance FROM accounts WHERE id = 1;  -- still 100
COMMIT;

SERIALIZABLE

O mais forte: é como se as transações fossem executadas uma após a outra. O PostgreSQL usa o isolamento de instantâneos serializável (SSI): detecta dependências simultâneas e aborta transações conflitantes:

BEGIN ISOLATION LEVEL SERIALIZABLE;
...
COMMIT;
-- ERROR: could not serialize access due to read/write dependencies

Definindo o nível de isolamento

Por transação, por sessão ou globalmente:

-- Per transaction:
BEGIN ISOLATION LEVEL SERIALIZABLE;

-- Per session:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

-- Default for new transactions in this session:
SET default_transaction_isolation = 'repeatable read';

-- Global default in postgresql.conf:
-- default_transaction_isolation = 'read committed'

Anomalias permitidas por cada nível

NívelSujaNão repetívelFantasma
READ UNCOMMITTEDtalveztalveztalvez
READ COMMITTEDnãotalveztalvez
REPEATABLE READnãonãonão (no PG)
SERIALIZABLEnãonãonão

Compromissos de desempenho

  • READ COMMITTED — sobrecarga mínima, padrão
  • REPEATABLE READ — o mesmo plano, consistência do instantâneo, sem impacto no desempenho, exceto em caso de conflitos de gravação
  • SERIALIZABLE — contabilidade adicional, pode abortar transações; é necessária lógica de repetição na aplicação

Padrão de repetição para SERIALIZABLE

SERIALIZABLE pode abortar com o código 40001. Repita em um ciclo:

for (let i = 0; i < 3; i++) {
  try {
    await client.query('BEGIN ISOLATION LEVEL SERIALIZABLE');
    // ... work ...
    await client.query('COMMIT');
    break;
  } catch (e) {
    if (e.code === '40001') continue;
    throw e;
  }
}

Lendo um instantâneo consistente

Para consultas analíticas de longa duração que precisam de dados consistentes, REPEATABLE READ oferece o equilíbrio adequado.

Comportamento em conflitos de gravação

Se duas transações modificarem a mesma linha:

  • READ COMMITTED — a segunda espera, depois lê novamente a nova linha e tenta outra vez
  • REPEATABLE READ — a segunda é abortada com "could not serialize" — a aplicação precisa tentar novamente

Escolha o nível adequado

Regras práticas:

  • OLTP — READ COMMITTED (padrão)
  • Relatórios que precisam de consistência — REPEATABLE READ
  • Dinheiro / estoque — SERIALIZABLE + repetição, OU bloqueios explícitos (FOR UPDATE)

Bloqueios explícitos às vezes superam o isolamento

Frequentemente, SELECT ... FOR UPDATE em READ COMMITTED é mais simples que SERIALIZABLE para uma única linha muito disputada.

Recapitulação

Os níveis de isolamento trocam segurança por concorrência.

  • READ COMMITTED é o padrão
  • REPEATABLE READ para leituras consistentes
  • SERIALIZABLE para operar "como se fosse serial" — requer lógica de repetição

Verificação rápida

Qual é o nível de isolamento padrão do PostgreSQL?

Perguntas Frequentes

A aula “Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE” é grátis?

Sim — o texto completo de “Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE”?

Compare os níveis de isolamento do padrão SQL, a implementação do PostgreSQL e escolha o nível adequado para sua carga de trabalho. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Propriedades ACID e anomalias
  2. Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE
  3. Interbloqueios: detecção e prevenção
  4. Bloqueio otimista vs pessimista
← Voltar para SQL Academy