Questão de Banco de Dados — MySQL — FGV 2024
- Código
- fg165206
- Banca
- FGV
- Órgão
- TJ AP
- Ano
- 2024
- Cargo
- AJ ( )
- A2,MARIA
- B1,JULIA 2,MARIA
- C1,JULIA 2,MARIA 3,SOFIA
- D1,JULIA 2,MARIA 3,ANA
- E2,MARIA 3,ANA
GabaritoB — 1,JULIA 2,MARIA
Gabarito: letra B — após a execução do script, a consulta retornará as linhas 1,JULIA e 2,MARIA. O COMMIT confirma as duas primeiras inserções, e o ROLLBACK desfaz todas as operações executadas após o SET autocommit = 0, revertendo o banco ao estado em que se encontrava após o COMMIT.
Para entender o resultado, é preciso acompanhar o script passo a passo, prestando atenção em dois pontos cruciais: o momento em que cada transação é iniciada e o efeito do ROLLBACK sobre as operações não confirmadas.
Uma transação é uma unidade lógica de trabalho que agrupa uma ou mais operações de banco de dados (inserções, atualizações, exclusões) que devem ser executadas de forma atômica — ou seja, ou todas são efetivadas, ou nenhuma delas tem efeito. Os comandos que delimitam uma transação são o START TRANSACTION (ou BEGIN), que a inicia, o COMMIT, que a finaliza com sucesso, tornando as alterações permanentes, e o ROLLBACK, que a finaliza de forma anormal, desfazendo todas as alterações feitas desde o início da transação.
No script apresentado, a primeira transação é iniciada com START TRANSACTION. Dentro dela, são inseridos os registros 1,JULIA e 2,MARIA. O comando COMMIT então confirma essas inserções, tornando-as permanentes no banco de dados. A partir desse ponto, a tabela contém as linhas 1,JULIA e 2,MARIA.
Em seguida, o comando SET autocommit = 0 desativa o modo de confirmação automática do MySQL. Isso significa que, a partir desse momento, cada comando DML (INSERT, UPDATE, DELETE) inicia uma nova transação que só será efetivada com um COMMIT explícito. As operações seguintes — inserir 3,SOFIA, atualizar o nome de id=3 para ANA e deletar a linha com nome='JULIA' — são executadas, mas ainda não foram confirmadas. O comando ROLLBACK então desfaz todas essas operações, revertendo o banco de dados ao estado em que se encontrava após o último COMMIT. Portanto, as alterações feitas após o SET autocommit = 0 são descartadas, e a tabela permanece com as linhas 1,JULIA e 2,MARIA.
A pegadinha desta questão está em entender que o ROLLBACK desfaz apenas as operações da transação corrente, ou seja, aquelas executadas após o último COMMIT (ou START TRANSACTION). As operações já confirmadas pelo COMMIT anterior não são afetadas. O candidato que não percebe que o SET autocommit = 0 inicia uma nova transação implícita pode pensar que o ROLLBACK desfaz tudo, incluindo as inserções confirmadas, o que levaria à alternativa A. Por outro lado, quem ignora o efeito do ROLLBACK pode considerar que as operações após o SET autocommit = 0 permanecem, resultando nas alternativas C, D ou E.
Apresenta apenas a linha 2,MARIA. Isso ocorreria se o ROLLBACK desfizesse também a inserção de 1,JULIA, o que não acontece, pois essa inserção foi confirmada pelo COMMIT anterior. O ROLLBACK só desfaz as operações da transação corrente, que se inicia após o SET autocommit = 0.
Apresenta as linhas 1,JULIA e 2,MARIA. As duas primeiras inserções foram confirmadas pelo COMMIT, tornando-se permanentes. As operações seguintes (INSERT, UPDATE, DELETE) foram desfeitas pelo ROLLBACK, pois não haviam sido confirmadas. Portanto, o estado final da tabela contém exatamente essas duas linhas.
Apresenta as linhas 1,JULIA, 2,MARIA e 3,SOFIA. Isso ocorreria se o ROLLBACK não tivesse efeito, ou se a inserção de 3,SOFIA fosse confirmada. No entanto, o ROLLBACK desfaz a inserção de 3,SOFIA, pois ela foi executada após o SET autocommit = 0 e não foi confirmada.
Apresenta as linhas 1,JULIA, 2,MARIA e 3,ANA. Isso ocorreria se o UPDATE que alterou o nome de id=3 para ANA fosse confirmado. No entanto, o ROLLBACK desfaz essa atualização, revertendo o nome para SOFIA e, em seguida, desfazendo a própria inserção de 3,SOFIA.
Apresenta as linhas 2,MARIA e 3,ANA. Isso ocorreria se o ROLLBACK desfizesse a inserção de 1,JULIA e a atualização de id=3 para ANA fosse mantida. No entanto, o ROLLBACK desfaz todas as operações após o SET autocommit = 0, incluindo a atualização, e a inserção de 1,JULIA já havia sido confirmada pelo COMMIT.
Gabarito: letra B
Link permanente: /questoes/fg165206