Considere que um banco de dados MySQL estava executa...
#1: START TRANSACTION.
#2: UPDATE contas SET saldo = saldo - @mov WHERE id=1023.
#3: UPDATE contas SET saldo = saldo + @mov WHERE id=3234.
#4: COMMIT.
Após a execução do segundo comando, o sistema sofreu uma falha que impossibilitou a execução dos demais comandos. Assim, é correto afirmar:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: B
A compreensão correta dessa questão exige o conhecimento de como funcionam as transações no MySQL. Uma transação é um conjunto de operações que seguem o princípio ACID (Atomicidade, Consistência, Isolamento e Durabilidade). Inicia-se com o comando START TRANSACTION e pode terminar com COMMIT, para salvar as alterações, ou ROLLBACK, para desfazê-las.
Na situação apresentada, após a execução do comando START TRANSACTION, duas atualizações foram aplicadas à tabela contas
. Contudo, antes que a transação fosse concluída com o comando COMMIT, houve uma falha de sistema. Em sistemas de banco de dados que seguem as propriedades ACID, como o MySQL, a falha antes do COMMIT faz com que todas as operações da transação atual sejam automaticamente desfeitas, para manter a consistência dos dados.
A correta é a alternativa B que menciona que "O banco de dados não sofrerá qualquer alteração dos seus dados após a falha". Isso se deve ao fato de que sem o COMMIT, as alterações ainda não são permanentes e, em caso de falha, são integralmente revertidas. Portanto, o saldo nas contas mencionadas retornará aos valores originais, como se as instruções UPDATE nunca tivessem sido executadas.
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
sem commit, sem mudança
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo