Pular para o conteúdo principal

Questão de Banco de Dados — MySQL — FGV 2024

Banco de DadosMySQL
Código
fg165206
Banca
FGV
Órgão
TJ AP
Ano
2024
Cargo
AJ ( )
Transação é uma unidade lógica de trabalho e é fundamental para garantir a integridade e a consistência dos dados.   Observe o seguinte script de uma transação implementada no MySQL:   CREATE TABLE candidato (id INT, nome CHAR (50), INDEX (id)); START TRANSACTION; INSERT INTO candidato VALUES (1, 'JULIA'); INSERT INTO candidato VALUES (2, 'MARIA'); COMMIT; SET autocommit = 0; INSERT INTO candidato VALUES (3, 'SOFIA'); UPDATE candidato SET nome='ANA' WHERE id=3; DELETE FROM candidato WHERE nome='JULIA'; ROLLBACK; SELECT * FROM candidato;   Após a execução do script apresentado, a consulta retornará as colunas id e nome com os valores:
  1. A2,MARIA
  2. B1,JULIA 2,MARIA
  3. C1,JULIA 2,MARIA 3,SOFIA
  4. D1,JULIA 2,MARIA 3,ANA
  5. E2,MARIA 3,ANA
Revelar gabarito e comentário

GabaritoB — 1,JULIA 2,MARIA

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

Transações no MySQL: COMMIT, ROLLBACK e autocommit

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.

  1. 1START TRANSACTION
  2. 2INSERT 1,JULIA e 2,MARIA
  3. 3COMMIT (torna permanente)
  4. 4SET autocommit = 0
  5. 5INSERT 3,SOFIA
  6. 6UPDATE id=3 para ANA
  7. 7DELETE nome=JULIA
  8. 8ROLLBACK (desfaz tudo)
  9. 9SELECT: 1,JULIA e 2,MARIA
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

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.

Alternativa B — ✅ Correta ⟵ GABARITO

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.

Alternativa C — ❌ Incorreta

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.

Alternativa D — ❌ Incorreta

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.

Alternativa E — ❌ Incorreta

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