Compartilhar via


REVERSÃO

Aplica-se a:marcado como 'sim' Databricks SQL

Reverte a transação atual, descartando todas as alterações feitas desde o início da transação. Para obter requisitos e padrões de uso para transações interativas, consulte transações interativas.

Sintaxe

ROLLBACK [ TRANSACTION | WORK ]

Parâmetros

Essa instrução não tem parâmetros.

Observações

  • Se não houver nenhuma transação ativa, a execução ROLLBACKnão resultará em um erro.
  • Se uma operação dentro de uma transação resultar em um erro, a transação entrará em um estado anulado. As operações de leitura e gravação subsequentes são rejeitadas com um erro até que a transação seja explicitamente revertida pelo usuário.
  • Para executar essa instrução, você deve ter uma transação ativa e permissões apropriadas em todos os objetos que foram lidos ou modificados dentro da transação.

Exemplos

Os exemplos a seguir demonstram como reverter transações interativas.

Reversão básica

Execute cada instrução em uma célula separada:

BEGIN TRANSACTION;
-- Attempt an insert operation
INSERT INTO my_table VALUES (1, 'incorrect-value');
-- After discovering the mistake, rollback the transaction
-- (no changes are actually made to the tables)
ROLLBACK TRANSACTION;

Gerenciar erros de execução

Quando uma instrução dentro de uma transação fracassa, você deve fazer uma reversão explícita antes de iniciar uma nova transação. Execute cada instrução em uma célula separada:

BEGIN TRANSACTION;
-- A query that causes a division by zero error
SELECT 1/0;
-- Throws error asking user to roll back the transaction
SELECT 1;
-- After error, user must roll back the transaction
-- as it cannot be committed
ROLLBACK TRANSACTION;

Manipular erros do analisador sintático

Erros do parser também exigem reversão explícita. Execute cada instrução em uma célula separada:

BEGIN TRANSACTION;
-- A query that causes a parsing error
SELLLLLLECT 1;
-- Throws error asking user to roll back the transaction
SELECT 1;
-- After error, user must roll back the transaction
-- as it cannot be committed
ROLLBACK TRANSACTION;

Reversão condicional

Você pode usar ROLLBACK para lógica condicional com base em regras de negócios. Execute cada instrução em uma célula separada:

BEGIN TRANSACTION;
-- Make changes
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Check a condition and rollback if not met
BEGIN
  DECLARE total_balance INT;
  SET total_balance = (SELECT SUM(balance) FROM accounts);

  IF total_balance < 0 THEN
    ROLLBACK;
  ELSE
    COMMIT;
  END IF;
END;

Reverter após falha no commit

Se COMMIT falhar, você precisa fazer a reversão explicitamente. Execute cada instrução em uma célula separada:

BEGIN TRANSACTION;
-- Make changes
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Attempt to commit
COMMIT;
-- If COMMIT fails (e.g., due to write conflict),
-- the transaction is aborted
-- You must explicitly roll back before starting a new transaction
ROLLBACK;