Questão de Banco de Dados — Concorrência em Banco de Dados — FURB 2025
Banco de Dados›Concorrê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:
AI, II e III.
BI e III, apenas.
CI e II, apenas.
DII, apenas.
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.