Транзакция объединяет несколько операций с базой данных в единый атомарный блок. На уровне СУБД это обеспечивает:
- Атомарность (Atomicity): Все операции внутри транзакции либо выполняются полностью, либо откатываются. Если какая-либо операция завершается с ошибкой, вся транзакция отменяется, и база данных возвращается в состояние до начала транзакции.
- Согласованность (Consistency): Транзакция переводит базу данных из одного согласованного состояния в другое. СУБД следит за соблюдением ограничений целостности (первичные ключи, внешние ключи, уникальные ограничения и т.д.) во время выполнения транзакции.
- Изолированность (Isolation): Транзакции изолированы друг от друга. Изменения, сделанные одной транзакцией, невидимы для других одновременно выполняющихся транзакций до тех пор, пока первая не будет успешно завершена (закоммичена). Уровни изоляции (Read Uncommitted, Read Committed, Repeatable Read, Serializable) определяют, насколько строго соблюдается это правило.
- Надежность (Durability): После успешного завершения (коммита) транзакции, сделанные ею изменения являются постоянными и не будут потеряны даже в случае сбоя системы. СУБД использует журналирование транзакций (write-ahead logging) для обеспечения надежности.
Во время выполнения транзакции СУБД:
- Начинает сбор изменений в временном буфере или журнале транзакций.
- Применяет блокировки на затрагиваемые данные, чтобы другие транзакции не могли одновременно изменять их и предотвратить конфликты (грязные чтения, неповторяющиеся чтения, фантомные чтения). Типы блокировок (разделяемые, эксклюзивные) завися