ANC - Analista em Computação - Ênfase em Desenvolvimento Oracle PL/SQL
Uma transação SQL executa operações que modificam o banco de dados. O comportamento da transação é determinado por princípios de correção da aplicação e do banco de dados, além de configurações que determinam o modo de acesso, área de diagnóstico e nível de isolamento. No SQL, o nível de isolamento é definido no comando SET TRANSACTION e pode ser: serializable, repeatable read, read committed e read uncommitted. Analise as assertivas abaixo:I. A opção default do SET TRANSACTION, para o nível de isolamento, é READ COMMITED, que garante que a transação não lerá dados de transações que não foram finalizadas.II. Ao definir o nível de isolamento como REPEATABLE READ, a transação será executada em completo isolamento, portanto não lerá dados de transações que não foram finalizadas com sucesso e, somente depois que ela terminar com sucesso, os dados que está alterando poderão ser acessados por outras transações.III. A opção READ UNCOMMITED permite que a transação leia dados de transações ativas que ainda não foram efetivados.Quais estão corretas?
AApenas I.
BApenas II.
CApenas III.
DApenas I e II.
EApenas II e III.
Revelar gabarito e comentário▾
GabaritoC — Apenas III.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Níveis de isolamento em SQL
Gabarito: letra C (apenas III). Apenas a assertiva III está correta: o nível READ UNCOMMITTED permite a leitura de dados não confirmados (leitura suja). A assertiva I erra ao afirmar que o default do SET TRANSACTION é READ COMMITTED — no padrão SQL, o nível de isolamento default é SERIALIZABLE. A assertiva II erra ao dizer que REPEATABLE READ proporciona "completo isolamento": esse nível ainda permite a ocorrência de leituras fantasmas (phantoms), não sendo totalmente isolado.
A tabela abaixo resume as violações possíveis em cada nível, conforme o padrão SQL (Elmasri & Navathe):
Nível de isolamento
Leitura suja
Leitura não repetitiva
Fantasma
READ UNCOMMITTED
Sim
Sim
Sim
READ COMMITTED
Não
Sim
Sim
REPEATABLE READ
Não
Não
Sim
SERIALIZABLE
Não
Não
Não
Item I — ❌ Incorreto
A assertiva afirma que o nível de isolamento default do comando SET TRANSACTION é READ COMMITTED. Erro: no padrão SQL, o default é SERIALIZABLE (a opção mais restritiva). Embora alguns SGBDs (como PostgreSQL e Microsoft SQL Server) adotem READ COMMITTED como padrão, a questão se refere ao comando SQL padrão. Além disso, a afirmação de que READ COMMITTED "garante que a transação não lerá dados de transações que não foram finalizadas" está correta (evita leitura suja), mas o erro no default torna o item falso.
Item II — ❌ Incorreto
A assertiva diz que REPEATABLE READ executa a transação em "completo isolamento" e que, somente após seu término, os dados alterados ficam acessíveis. Erro: REPEATABLE READ previne leitura suja e leitura não repetitiva, mas permite leituras fantasmas (inserção de novas linhas por outra transação que satisfaçam a condição WHERE). Portanto, não é um isolamento completo — apenas SERIALIZABLE o é. A parte sobre "somente depois que ela terminar" é verdadeira para qualquer nível (as alterações só são visíveis após o COMMIT), mas o erro central invalida a assertiva.
Item III — ✅ Correto ⟵ GABARITO
A assertiva descreve exatamente o comportamento do nível READ UNCOMMITTED: ele permite que uma transação leia dados ainda não confirmados por outras transações ativas (leitura suja). É o nível mais permissivo e, por isso, é o único que não previne essa anomalia.
NÃO CAIA NESSA!
A banca explora a divergência entre o padrão SQL e implementações comuns. Muitos candidatos, por conhecerem SGBDs como PostgreSQL (default READ COMMITTED), marcam a assertiva I como verdadeira. No entanto, a questão se refere ao comando SQL padrão, cujo default é SERIALIZABLE. Fique atento: em provas de concurso, salvo menção explícita a um SGBD específico, prevalece o padrão SQL.