В чём разница между COMMIT и SAVEPOINT?
COMMIT завершает транзакцию и сохраняет все изменения. SAVEPOINT создаёт точку внутри транзакции, к которой можно откатиться через ROLLBACK TO, не отменяя всю транзакцию.
COMMIT говорит базе данных: "всё, что сделано в этой транзакции, нужно сохранить навсегда". После этой команды все изменения становятся видимыми другим пользователям, и отменить их уже нельзя.
SAVEPOINT — это вспомогательная команда внутри транзакции, которая ставит внутреннюю метку. Если после неё произойдёт ошибка или потребуется отменить часть действий, можно выполнить ROLLBACK TO SAVEPOINT и откатиться только до этой точки, не теряя всю транзакцию.
Например, вы можете сначала вставить одну запись, поставить SAVEPOINT, потом сделать ещё несколько операций. Если что-то пошло не так, вы возвращаетесь к SAVEPOINT, а потом завершаете транзакцию через COMMIT, сохранив только то, что было до этой точки.
Таким образом, SAVEPOINT даёт гибкость внутри длинной транзакции, а COMMIT — окончательно сохраняет её результат.
Пример:
В этом примере мы сначала добавляем пользователя Иван, затем устанавливаем SAVEPOINT. Далее происходит вставка с ошибкой (например, поле name не может быть NULL). Мы откатываемся к step1, отменяя только последнюю вставку, а затем добавляем другого пользователя — Ольгу. COMMIT сохраняет изменения, и в таблице остаются Иван и Ольга. Ошибочная операция не мешает завершить транзакцию.
Отметьте свой прогресс