Declaração MySQL ROLLBACK
A instrução `ROLLBACK` no MySQL é usada para desfazer transações que ainda não foram confirmadas no banco de dados. Ele permite que você reverta o banco de dados para o último estado confirmado, garantindo a integridade dos dados em caso de erros ou alterações não intencionais.
Uso
O `ROLLBACK` é utilizado no controle de transações para cancelar uma transação e restaurar o banco de dados ao seu estado anterior. Essa instrução é particularmente útil quando ocorre um erro durante uma transação, permitindo que você reverta todas as alterações feitas após o último `COMMIT`. As transações são sequências de operações executadas como uma única unidade lógica de trabalho, e o `COMMIT` é usado para tornar permanentes todas as alterações, enquanto o `ROLLBACK` as desfaz.
ROLLBACK;
Nessa sintaxe, `ROLLBACK` simplesmente reverte todas as operações realizadas na transação atual. Observe que o `ROLLBACK` só é aplicável em mecanismos de armazenamento que suportam transações, como o InnoDB, e não é aplicável em mecanismos de armazenamento não transacionais, como o MyISAM.
Exemplos
1. Reversão básica
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
ROLLBACK;
Nesse exemplo, a operação `UPDATE` é revertida, de modo que o `balance` permanece inalterado devido ao `ROLLBACK`.
2. Reversão após erro
START TRANSACTION;
INSERT INTO orders (customer_id, product_id, quantity) VALUES (1, 2, 3);
-- Error: Duplicate entry for key 'PRIMARY'
ROLLBACK;
Aqui, uma transação é iniciada, mas ocorre um erro durante a operação `INSERT`. A instrução `ROLLBACK` garante que nenhum dado parcial seja salvo.
3. Reversão condicional
START TRANSACTION;
UPDATE inventory SET stock = stock - 10 WHERE product_id = 5;
IF (SELECT stock FROM inventory WHERE product_id = 5) < 0 THEN
ROLLBACK;
END IF;
Esse exemplo usa uma instrução condicional para `ROLLBACK` somente se o estoque resultante se tornar negativo, garantindo a consistência lógica dos dados. Observe que as construções processuais do MySQL, como `IF... ENTÃO... END IF` requerem manipuladores ou procedimentos/funções armazenados, que podem não ser diretamente executáveis em um script SQL padrão sem contexto adicional.
Dicas e práticas recomendadas
- Use com transações. Sempre use `ROLLBACK` em um bloco de transação para garantir sua eficácia.
- Verifique as condições. Antes da reversão, verifique as condições para evitar operações desnecessárias, garantindo o uso eficiente dos recursos.
- Combine com Savepoints. Use `SAVEPOINT` para obter um controle mais granular, permitindo reversões parciais dentro de transações com `ROLLBACK TO SAVEPOINT`.
- Monitorar o desempenho. Reversões frequentes podem afetar o desempenho; garanta que as transações sejam bem planejadas para minimizar as reversões.
- Impacto da consistência dos dados. O uso inadequado de reversões pode afetar a consistência dos dados. Gerencie cuidadosamente as transações para evitar a perda não intencional de dados.
- Aviso de Irreversibilidade. Quando o `ROLLBACK` é executado, as alterações são irreversivelmente desfeitas. Certifique-se de que essa operação seja realizada intencionalmente.