Sdílet prostřednictvím


ROLLBACK

Platí pro:označeno jako „ano“ Databricks SQL

Vrátí zpět aktuální transakci a zahodí všechny změny provedené od začátku transakce. Informace o požadavcích a vzorech použití pro interaktivní transakce najdete v tématu Interaktivní transakce.

Syntaxe

ROLLBACK [ TRANSACTION | WORK ]

Parametry

Tento příkaz nemá žádné parametry.

Poznámky

  • Pokud neexistuje žádná aktivní transakce, provedení ROLLBACKnezpůsobí chybu.
  • Pokud operace v rámci transakce způsobí chybu, transakce zadá přerušený stav. Následné operace čtení a zápisu jsou odmítnuty s chybou, dokud uživatel transakci explicitně nevrátí zpět.
  • Chcete-li provést tento příkaz, musíte mít aktivní transakci a příslušná oprávnění pro všechny objekty, které byly přečteny nebo změněny v rámci transakce.

Příklady

Následující příklady ukazují, jak vrátit zpět interaktivní transakce.

Základní vrácení zpět

Spusťte každý příkaz v samostatné buňce:

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;

Řešení chyb při provádění

Pokud příkaz v rámci transakce selže, musíte před zahájením nové transakce explicitně provést rollback. Spusťte každý příkaz v samostatné buňce:

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;

Zpracování chyb analyzátoru

Chyby analyzátoru také vyžadují explicitní vrácení zpět. Spusťte každý příkaz v samostatné buňce:

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;

Podmíněné vrácení zpět

Podmíněnou logiku založenou na obchodních pravidlech můžete použít s ROLLBACK. Spusťte každý příkaz v samostatné buňce:

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;

Vrácení změn po neúspěšném commitu

Pokud COMMIT selže, musíte explicitně provést zpětný krok. Spusťte každý příkaz v samostatné buňce:

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;