Введение

Вложенная транзакция — это транзакция базы данных, которая начинается инструкцией в области видимости уже запущенной транзакции. Вложенные транзакции реализуются по-разному в различных базах данных. Однако, общим для них является то, что изменения не становятся видимыми для несвязанных транзакций до тех пор, пока не будет зафиксирована самая внешняя транзакция. Это означает, что фиксация во внутренней транзакции не обязательно приводит к сохранению обновлений в системе. В некоторых базах данных изменения, внесенные вложенной транзакцией, не видны «родительской» транзакции до тех пор, пока вложенная транзакция не будет зафиксирована. По мнению некоторых, это вытекает из свойства изоляции транзакций. Возможность корректной обработки вложенных транзакций является необходимым условием для построения настоящих компонентно-ориентированных архитектур приложений. В инкапсулированной компонентной архитектуре вложенные транзакции могут возникать без ведома программиста. Функция компонента может содержать или не содержать транзакцию базы данных (это инкапсулированная особенность компонента. См. Информационное сокрытие). Если вызов такой функции компонента выполняется внутри блока BEGIN COMMIT, возникают вложенные транзакции. Поскольку популярные базы данных, такие как MySQL, не поддерживают вложение блоков BEGIN COMMIT, для обработки этого требуется фреймворк или монитор транзакций. Говоря о вложенных транзакциях, следует подчеркнуть, что эта функция зависит от СУБД и не доступна во всех базах данных. Теория вложенных транзакций аналогична теории плоских транзакций. Банковская индустрия обычно обрабатывает финансовые транзакции с использованием открытых вложенных транзакций, которые представляют собой более гибкий вариант модели вложенных транзакций, обеспечивающий более высокую производительность, но при этом допускающий компромиссы в отношении согласованности.