Dela via


ROLLBACK

Gäller för:markerad ja Databricks SQL

Återställer den aktuella transaktionen och tar bort alla ändringar som gjorts sedan transaktionens början. Krav och användningsmönster för interaktiva transaktioner finns i Interaktiva transaktioner.

Syntax

ROLLBACK [ TRANSACTION | WORK ]

Parameters

Den här uttalandet har inga parametrar.

Notes

  • Om det inte finns någon aktiv transaktion, leder utförandet av ROLLBACK inte till något fel.
  • Om en åtgärd i en transaktion resulterar i ett fel, anger transaktionen ett avbrutet tillstånd. Efterföljande läs- och skrivåtgärder avvisas med ett fel tills transaktionen uttryckligen återställs av användaren.
  • Om du vill köra den här instruktionen måste du ha en aktiv transaktion och lämpliga behörigheter för alla objekt som har lästs eller ändrats i transaktionen.

Exempel

Följande exempel visar hur du återställer interaktiva transaktioner.

Grundläggande tillbakagång

Kör varje instruktion i en separat cell:

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;

Hantera exekveringsfel

När ett kommando i en transaktion misslyckas måste du uttryckligen rulla tillbaka transaktionen innan du startar en ny. Kör varje instruktion i en separat cell:

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;

Hantera parserfel

Parsningsfel kräver också explicit återställning. Kör varje instruktion i en separat cell:

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;

Villkorlig återställning

Du kan använda ROLLBACK för villkorsstyrd logik baserat på affärsregler. Kör varje instruktion i en separat cell:

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;

Återställa efter misslyckad incheckning

Om en COMMIT misslyckas måste du uttryckligen rulla tillbaka. Kör varje instruktion i en separat cell:

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;