Udostępnij za pośrednictwem


ROLLBACK

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL

Cofa bieżącą transakcję, odrzucając wszystkie zmiany wprowadzone od początku transakcji. Aby uzyskać wymagania i wzorce użycia dla transakcji interakcyjnych, zobacz Interakcyjne transakcje.

Składnia

ROLLBACK [ TRANSACTION | WORK ]

Parametry

To oświadczenie nie ma parametrów.

Notatki

  • Jeśli nie ma aktywnej transakcji, wykonanie ROLLBACKnie powoduje błędu.
  • Jeśli operacja w ramach transakcji spowoduje wystąpienie błędu, transakcja przechodzi w stan przerwany. Kolejne operacje odczytu i zapisu są odrzucane z powodu błędu, dopóki transakcja nie zostanie jawnie wycofana przez użytkownika.
  • Aby wykonać tę instrukcję, musisz mieć aktywną transakcję i odpowiednie uprawnienia do wszystkich obiektów, które zostały odczytane lub zmodyfikowane w ramach transakcji.

Examples

W poniższych przykładach pokazano, jak wycofać interaktywne transakcje.

Podstawowe cofanie zmian

Uruchom każdą instrukcję w osobnej komórce:

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;

Obsługa błędów w trakcie wykonywania

W przypadku niepowodzenia instrukcji w ramach transakcji należy jawnie wycofać transakcję przed rozpoczęciem nowej transakcji. Uruchom każdą instrukcję w osobnej komórce:

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;

Obsługa błędów analizatora

Błędy analizatora wymagają również jawnego wycofania. Uruchom każdą instrukcję w osobnej komórce:

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;

Wycofywanie warunkowe

Logikę warunkową można używać ROLLBACK na podstawie reguł biznesowych. Uruchom każdą instrukcję w osobnej komórce:

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;

Wycofanie zmian po nieudanym zatwierdzeniu

Jeśli COMMIT ulegnie awarii, musisz jawnie wycofać. Uruchom każdą instrukcję w osobnej komórce:

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;