Em banco de dados, uma transação é uma unidade lógica de tr...
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 comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a letra A. Para entender por que essa é a resposta certa, é necessário compreender o conceito de transações em bancos de dados e o funcionamento do controle de transações no MySQL.
Uma transação é uma sequência de operações tratadas como uma única unidade lógica de trabalho. As transações respeitam as propriedades ACID, que são Atomicidade, Consistência, Isolamento e Durabilidade. No script em questão, a primeira transação é iniciada com o comando START TRANSACTION e confirmada com o comando COMMIT. Isso significa que as operações dentro dessa transação serão efetivamente aplicadas ao banco de dados.
O comando SET autocommit = 0 desativa a autoconfirmação, fazendo com que as alterações precisem ser explicitamente confirmadas com um COMMIT para serem permanentes. No entanto, após essa linha, todas as operações são revertidas com o comando ROLLBACK, que desfaz qualquer operação desde o último COMMIT.
Portanto, o INSERT inicial com os valores (1, 'LUCAS') é a única operação que persiste, pois foi confirmada antes de desativar o autocommit e antes de qualquer ROLLBACK. Todas as operações após o SET autocommit = 0 são anuladas pelo ROLLBACK posterior. O SELECT final retornará o estado da tabela após a execução do COMMIT e antes de qualquer operação desfeita pelo ROLLBACK, ou seja, apenas o registro com id 1 e nome LUCAS.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Cria a tabela
CREATE TABLE cliente (
id INT,
nome CHAR(50),
INDEX (id)
);
Esta instrução cria uma tabela chamada "cliente" com duas colunas: "id" do tipo inteiro e "nome" do tipo caractere com um comprimento máximo de 50 caracteres. Também cria um índice na coluna "id".
START TRANSACTION;
Isso inicia uma transação. Todas as instruções SQL a seguir serão executadas dentro dessa transação até que seja encontrada uma instrução COMMIT ou ROLLBACK.
INSERT INTO cliente VALUES (1, 'LUCAS');
Essa instrução insere uma linha na tabela "cliente" com id=1 e nome='LUCAS'.
COMMIT;
Essa instrução confirma a transação, o que significa que todas as alterações feitas dentro da transação são permanentemente salvas no banco de dados.
SET autocommit = 0;
Essa instrução desativa o autocommit, o que significa que cada instrução SQL subsequente não será automaticamente confirmada. As alterações só serão salvas quando você usar explicitamente a instrução COMMIT.
INSERT INTO cliente VALUES (2, 'MARCOS');
INSERT INTO cliente VALUES (3, 'PAULO');
Essas instruções inserem mais duas linhas na tabela "cliente" com id=2 e nome='MARCOS', e id=3 e nome='PAULO', respectivamente.
UPDATE cliente SET nome='TIAGO' WHERE id=3;
Essa instrução atualiza o valor da coluna "nome" para 'TIAGO' na linha em que o id=3 (linha do Paulo).
DELETE FROM cliente WHERE nome='LUCAS';
Essa instrução deleta todas as linhas da tabela "cliente" em que o nome é 'LUCAS'.
ROLLBACK;
Essa instrução cancela a transação, o que significa que todas as alterações feitas durante a transação são desfeitas, e o banco de dados volta ao estado anterior à transação.
Selecionar e Exibir os Dados da Tabela:
SELECT * FROM cliente;
Resultado Esperado:
Se você executar essas instruções em ordem, o resultado esperado será o seguinte:
id nome
1 LUCAS
Após a instrução ROLLBACK, as alterações feitas durante a transação serão desfeitas, e a tabela terá apenas a linha inicial com id=1 e nome='LUCAS'.
Gabarito letra A
Isso ocorre porque a transação insere o registro com id=1 e nome='LUCAS', e em seguida é confirmada com o comando COMMIT. As demais operações (INSERT, UPDATE, DELETE) são realizadas após o COMMIT, mas são desfeitas pelo comando ROLLBACK, que cancela a transação. Portanto, apenas o registro inserido antes do COMMIT permanece na tabela. A resposta correta é a letra A - 1 LUCAS.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo