Вложенные транзакции (nested transactions) - это транзакции, которые начинаются внутри другой, уже активной транзакции.
Ключевые аспекты:
- Атомарность: Каждая вложенная транзакция является атомарной. Если она завершается успешно, ее изменения становятся видимыми во внешней транзакции. Если она откатывается, ее изменения отменяются, не затрагивая внешнюю транзакцию.
- Зависимость: Вложенная транзакция не может быть зафиксирована, пока не будет зафиксирована внешняя транзакция.
- Откат: Откат внешней транзакции приводит к откату всех вложенных транзакций, даже если они были успешно завершены. Откат вложенной транзакции не приводит к откату внешней.
- Точки сохранения (Savepoints): В большинстве реализаций вложенные транзакции реализуются с использованием точек сохранения. Начало вложенной транзакции соответствует установке точки сохранения, а ее фиксация – освобождению этой точки. Откат вложенной транзакции – это откат до соответствующей точки сохранения.
Пример использования (псевдокод):
sql