Команда SAVEPOINT
Команда SAVEPOINT используется внутри транзакции
для создания промежуточной точки сохранения.
Это позволяет откатить только часть изменений,
выполненных после указанной точки,
не отменяя всю транзакцию целиком.
Промежуточные точки автоматически
удаляются после выполнения COMMIT
или полного ROLLBACK.
Синтаксис
SAVEPOINT savepoint_name
Таблицы для примеров
| id | name | balance |
|---|---|---|
| 1 | Ivan | 1000 |
| 2 | Olga | 1500 |
Пример
Давайте начнём транзакцию, выполним изменение баланса и создадим точку сохранения:
START TRANSACTION;
UPDATE accounts
SET balance = balance - 200
WHERE id = 1;
SAVEPOINT sp_after_first_update;
Давайте выполним дополнительные изменения и откатимся только к точке сохранения:
UPDATE 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 |
Пример
Давайте начнём транзакцию, создадим несколько точек сохранения и откатимся к одной из них:
START 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,
которая завершает транзакцию