Команда SAVEPOINT

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

Промежуточные точки автоматически удаляются после выполнения COMMIT или полного ROLLBACK.

Синтаксис

sqlSAVEPOINT savepoint_name

Таблицы для примеров

accounts
id name balance
1 Ivan 1000
2 Olga 1500

Пример

Давайте начнём транзакцию, выполним изменение баланса и создадим точку сохранения:

sqlSTART TRANSACTION;

UPDATE accounts
SET balance = balance - 200
WHERE id = 1;

SAVEPOINT sp_after_first_update;

Давайте выполним дополнительные изменения и откатимся только к точке сохранения:

sqlUPDATE accounts
SET balance = balance - 300
WHERE id = 1;

ROLLBACK TO SAVEPOINT sp_after_first_update;

COMMIT;

Результат выполнения кода:

id name balance
1 Ivan 800
2 Olga 1500

Пример

Давайте начнём транзакцию, создадим несколько точек сохранения и откатимся к одной из них:

sqlSTART TRANSACTION;

UPDATE accounts
SET balance = balance - 100
WHERE id = 1;

SAVEPOINT sp_step_1;

UPDATE accounts
SET balance = balance - 200
WHERE id = 1;

SAVEPOINT sp_step_2;

UPDATE accounts
SET balance = balance - 300
WHERE id = 1;

ROLLBACK TO SAVEPOINT sp_step_2;

COMMIT;

Результат выполнения кода:

id name balance
1 Ivan 700
2 Olga 1500

Смотрите также

  • команду ROLLBACK,
    которая отменяет изменения
  • команду START TRANSACTION,
    которая начинает транзакцию
  • команду COMMIT,
    которая завершает транзакцию