FC ConcursosFC Concursos

Questão FC546293

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 consis

Sistema de Gerenciamento de Banco de Dados (SGBD)

FURB · 2025

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. I, II e III.
  2. I e III, apenas.
  3. I e II, apenas.
  4. II, apenas.
  5. III, apenas.
Mostrar resposta e comentário

Gabarito

Certo

Comentário do professor

FOR UPDATE faz com que o SGBD adquira um bloqueio exclusivo nas linhas retornadas e mantenha esse bloqueio até o fim da transação. Enquanto o bloqueio estiver ativo, outras transações não conseguem atualizar nem obter um SELECT FOR UPDATE sobre as mesmas linhas, garantindo que a linha permaneça estável durante a operação.

Esse comportamento torna o uso de SELECT ... FOR UPDATE eficaz para operações do tipo read-modify-write. Ao travar a linha antes de lê-la e modificá-la, evitam-se condições de corrida como atualizações perdidas, pois as alterações concorrentes ficam serializadas pelo mecanismo de bloqueio.

É importante considerar que essa técnica preserva a consistência da própria linha bloqueada, mas gera espera entre transações e exige cuidado para evitar impasses.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo