Поделиться через


Откат

Область применения:отмечено «Да» Databricks SQL

Отменяет текущую транзакцию, отменяя все изменения, внесенные с начала транзакции. Сведения о требованиях и шаблонах использования для интерактивных транзакций см. в разделе "Интерактивные транзакции".

Синтаксис

ROLLBACK [ TRANSACTION | WORK ]

Параметры

Это выражение не имеет параметров.

Примечания

  • Если активная транзакция ROLLBACK отсутствует, выполнение не приводит к ошибке.
  • Если операция в транзакции приводит к ошибке, транзакция вводит прерванное состояние. Последующие операции чтения и записи отклоняются с сообщением об ошибке, пока транзакция не будет откатена пользователем в явной форме.
  • Для выполнения этой инструкции необходимо иметь активную транзакцию и соответствующие разрешения на все объекты, которые были считываются или изменены в транзакции.

Примеры

В следующих примерах показано, как откатить интерактивные транзакции.

Базовый откат

Выполните каждую инструкцию в отдельной ячейке:

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;

Обработка ошибок выполнения

Если операция в транзакции терпит неудачу, прежде чем начать новую транзакцию, необходимо явно откатить. Выполните каждое выражение в отдельной ячейке.

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;

Обработка ошибок синтаксического анализа

Ошибки синтаксического анализа также требуют настройки отката. Выполните каждую инструкцию в отдельной ячейке:

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;

Условный откат

Можно использовать ROLLBACK для условной логики на основе бизнес-правил. Выполните каждое утверждение в отдельной ячейке.

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;

Откат после неудачной фиксации

Если COMMIT неудача, необходимо выполнить откат явно. Выполните каждую инструкцию в отдельной ячейке:

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;