Pular para o conteúdo principal

Questão de Banco de Dados — Concorrência em Banco de Dados — FURB 2025

Banco de DadosConcorrência em Banco de Dados
Código
qg497141
Banca
FURB
Órgão
Prefeitura de Florianópolis - SC
Ano
2025
Nível
Superior
Cargo
Auditor Fiscal de Tributos Municipais - Tecnologia da Informação - 2º Dia
Em uma aplicação bancária que utiliza um sistema de banco de dados relacional compatível com o padrão ANSI SQL, um desenvolvedor implementa a seguinte lógica para garantir a consistência ao realizar transferências entre contas:BEGIN;SELECT saldo FROM contas WHERE id = 101 FOR UPDATE;UPDATE contas SET saldo = saldo - 500 WHERE id = 101;SELECT saldo FROM contas WHERE id = 202 FOR UPDATE;UPDATE contas SET saldo = saldo + 500 WHERE id = 202;COMMIT;Durante testes de carga, outra transação concorrente tenta acessar a conta de id 101 logo após o início da transação acima. Com base nesse contexto, avalie as afirmações a seguir:I. A cláusula FOR UPDATE utilizada no SELECT bloqueia a linha lida até o fim da transação, impedindo que outras transações atualizem ou façam SELECT FOR UPDATE na mesma linha enquanto o bloqueio estiver ativo.II. O uso de FOR UPDATE é eficaz para evitar condições de corrida (race conditions) ao modificar linhas críticas em um modelo de leitura-modificação-escrita.III. A cláusula FOR UPDATE garante isolamento no nível SERIALIZABLE por si só, impedindo leitura fantasma e garantindo que nenhuma transação concorrente acesse qualquer dado relacionado.É correto o que se afirma em:
  1. AI, II e III.
  2. BI e III, apenas.
  3. CI e II, apenas.
  4. DII, apenas.
  5. EIII, apenas.
Revelar gabarito e comentário

GabaritoC — I e II, apenas.

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”.

Concorrência em Banco de Dados: cláusula FOR UPDATE

Gabarito: letra C (corretos os itens I e II). A cláusula FOR UPDATE realiza bloqueio pessimista de linhas, impedindo que outras transações atualizem ou bloqueiem as mesmas linhas até o fim da transação, o que é eficaz para evitar condições de corrida (race conditions). No entanto, ela não equivale ao nível de isolamento SERIALIZABLE, pois não previne leituras fantasma nem bloqueia dados não selecionados.

A banca testa o entendimento sobre o funcionamento do FOR UPDATE e sua limitação em relação ao isolamento SERIALIZABLE.

Item I — ✅ Correto

O FOR UPDATE, utilizado dentro de uma transação (entre BEGIN e COMMIT/ROLLBACK), adquire bloqueios exclusivos nas linhas selecionadas. Esses bloqueios permanecem até o fim da transação, impedindo que outras transações modifiquem ou adquiram bloqueios (SELECT FOR UPDATE) nessas mesmas linhas. A descrição está precisa.

Item II — ✅ Correto

Em um padrão de leitura-modificação-escrita (read-modify-write), como o exemplo de transferência bancária, o FOR UPDATE garante que nenhuma outra transação altere o saldo entre o SELECT e o UPDATE, evitando condições de corrida. É uma técnica de controle de concorrência pessimista eficaz.

Item III — ❌ Incorreto

A cláusula FOR UPDATE não garante isolamento SERIALIZABLE por si só. Ela apenas bloqueia as linhas lidas, mas não impede o surgimento de linhas fantasmas (inserções de novas linhas que atendam à condição) nem bloqueia itens de dados não lidos. O nível SERIALIZABLE requer mecanismos adicionais, como bloqueios de predicado ou de intervalo. Portanto, a afirmação é exagerada e incorreta.

NÃO CAIA NESSA!

A banca tenta confundir o candidato associando FOR UPDATE a SERIALIZABLE. O FOR UPDATE é um bloqueio de linha, não de intervalo; ele não elimina fantasmas nem garante serialização completa. Lembre-se: SERIALIZABLE é o nível mais forte e exige mais do que simples row locks.

Gabarito: letra C — apenas os itens I e II estão corretos.

Link permanente: /questoes/qg497141