SAVEPOINT позволяет создать промежуточную точку внутри транзакции, к которой можно откатиться без полного ROLLBACK. Это полезно, когда нужно отменить только часть операций, сохранив уже выполненные изменения в текущей транзакции.
SAVEPOINT позволяет создать промежуточную точку внутри транзакции, к которой можно откатиться без полного ROLLBACK. Это полезно, когда нужно отменить только часть операций, сохранив уже выполненные изменения в текущей транзакции.
Что такое savepoint
SAVEPOINT — это имя промежуточной точки внутри транзакции. Если что-то пошло не так, можно откатиться не ко всей транзакции, а только к этому месту.
Как это выглядит
BEGIN;
INSERT INTO orders (id, user_id, total)
VALUES (1, 10, 100);
SAVEPOINT after_order;
INSERT INTO order_items (order_id, product_id, qty)
VALUES (1, 5, 2);
ROLLBACK TO SAVEPOINT after_order;
COMMIT;В этом примере первая вставка сохранится, а вторая будет отменена, потому что мы откатились к after_order.
Когда это полезно
когда в одной транзакции есть несколько независимых шагов;
когда нужно попробовать рискованную операцию и при ошибке отменить только её;
когда импорт данных должен продолжаться, даже если одна часть строки не прошла валидацию;
когда приложение реализует частичный откат сложного бизнес-процесса.
Ограничения
Savepoint не заменяет полноценную транзакционную логику. Он помогает только внутри уже открытой транзакции и не решает проблемы плохого проектирования бизнес-процесса.
Как ответить на собеседовании
Savepoint — это промежуточная точка внутри транзакции. Я могу сделать ROLLBACK TO SAVEPOINT, чтобы отменить только часть операций, а потом продолжить транзакцию и сделать COMMIT. Это удобно для сложных сценариев, где нужен частичный откат.
Оцени свой прогресс