Questão 83 Comentada - Prefeitura de Florianópolis - Auditor Fiscal de Tributos Municipais Tecnologia da Informação 2º Dia - 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:

  • A I, II e III.
  • B I e III, apenas.
  • C I e II, apenas.
  • D II, apenas.
  • E III, apenas.