Partilhar via


ROLLBACK

Aplica-se a:sim marcado Databricks SQL

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

Sintaxe

ROLLBACK [ TRANSACTION | WORK ]

Parâmetros

Esta afirmação não tem parâmetros.

Notes

  • Se não houver transação ativa, a execução ROLLBACKnão resulta em erro.
  • Se uma operação dentro de uma transação resultar num erro, a transação entra num estado abortado. As operações subsequentes de leitura e escrita são rejeitadas com um erro até que a transação seja explicitamente revertida pelo utilizador.
  • Para executar esta instrução, deve ter uma transação ativa e permissões apropriadas sobre todos os objetos que foram lidos ou modificados dentro da transação.

Exemplos

Os exemplos seguintes demonstram como reverter transações interativas.

Rollback básico

Execute cada instrução numa 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;

Lidar com erros de execução

Quando uma instrução dentro de uma transação falha, deve reverter explicitamente antes de iniciar uma nova transação. Execute cada instrução numa 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;

Lidar com erros do parser

Erros do parser também exigem um rollback explícito. Execute cada instrução numa 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

Podes usar ROLLBACK para a lógica condicional com base em regras de negócio. Execute cada instrução numa 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 um commit falhado

Caso COMMIT falhe, deve reverter explicitamente. Execute cada instrução numa 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;