← Questões de Banco de Dados

Banco de Dados · FGV · 2023

Questão comentada de Banco de Dados

Em banco de dados, uma transação é uma unidade lógica de trabalho. Observe o seguinte script de uma transação implementada no MYSQL: CREATE TABLE cliente (id INT, nome CHAR (50), INDEX (id)); START TRANSACTION; INSERT INTO cliente VALUES (1, 'LUCAS'); COMMIT; SET autocommit = 0; INSERT INTO cliente VALUES (2, 'MARCOS'); INSERT INTO cliente VALUES (3, 'PAULO'); UPDATE cliente SET nome='TIAGO' WHERE id=3; DELETE FROM cliente WHERE nome='LUCAS'; ROLLBACK; SELECT * FROM cliente; Após a execução do script apresentado, a consulta retornará as colunas id e nome com os valores:

Gabarito: A

Em MySQL, transacao e o bloco de operacoes que so vira definitivo quando voce manda COMMIT. Se der ROLLBACK, o banco desfaz tudo o que ainda nao tinha sido confirmado. Aqui tem um detalhe importante: o primeiro INSERT aconteceu entre START TRANSACTION e COMMIT, entao ele foi gravado de forma permanente. Depois disso, o script faz SET autocommit = 0, o que desliga a confirmacao automatica. A partir dai, os comandos INSERT, UPDATE e DELETE passam a compor uma nova transacao em aberto. Como no fim veio ROLLBACK, todo esse segundo bloco foi desfeito, como se nunca tivesse existido. Resultado prático: permanece apenas o registro inserido e confirmado antes, com id 1 e nome LUCAS. Os demais comandos nao sobrevivem ao rollback. E esse eh o tipo de pegadinha que a FGV adora: misturar uma transacao ja commitada com outra ainda pendente para ver se voce apaga ate o que ja foi salvo. Em termos conceituais, isso segue a ideia de atomicidade das transacoes, um dos pilares do ACID: ou o conjunto de operacoes e confirmado, ou e desfeito. No MySQL, isso vale especialmente quando voce controla manualmente o inicio e o fim da transacao.

Continue treinando

Questões relacionadas