Работа с транзакциями. ACID. Уровни изолированности.
Работа с транзакциями, принципы ACID и уровни изоляции — ключевые аспекты управления базами данных, обеспечивающие их корректность и надежность. Давайте рассмотрим их подробнее.
1. Работа с транзакциями
Транзакция — это последовательность операций, выполняемых как единое целое. Основные операции с транзакциями включают:
Начало транзакции: Инициализация нового контекста транзакции.
Выполнение операций: Выполнение SQL-запросов, таких как
INSERT
,UPDATE
,DELETE
.Фиксация транзакции (Commit): Сохранение всех изменений, выполненных в рамках транзакции.
Откат транзакции (Rollback): Отмена всех изменений, выполненных в рамках транзакции, если возникла ошибка или требуется откат.
Сохранение точек (Savepoints): Создание точек для частичного отката транзакции.
2. Принципы ACID
ACID — это набор свойств, которые транзакция должна соблюдать для обеспечения надежности базы данных:
Atomicity (Атомарность): Транзакция должна быть выполнена полностью или не выполнена вовсе. Если транзакция не завершается успешно, все изменения откатываются.
Consistency (Согласованность): Транзакция должна переводить базу данных из одного согласованного состояния в другое, соблюдая все ограничения и правила целостности данных.
Isolation (Изолированность): Одновременно выполняемые транзакции должны быть изолированы друг от друга, и изменения одной транзакции не должны быть видны другим до её завершения.
Durability (Долговечность): После завершения транзакции её изменения сохраняются и не теряются, даже в случае сбоя системы.
3. Уровни изоляции транзакций
Уровни изоляции определяют, как транзакции видят изменения, внесенные другими транзакциями. SQL стандарт предлагает четыре уровня изоляции:
READ UNCOMMITTED: Самый низкий уровень изоляции, позволяющий читать необработанные изменения других транзакций. Это может привести к "грязным чтениям" (dirty reads).
READ COMMITTED: Гарантирует, что транзакция читает только подтвержденные изменения. Это предотвращает грязные чтения, но не защищает от "неповторяющихся чтений" (non-repeatable reads).
REPEATABLE READ: Гарантирует, что если транзакция читает данные, то она увидит их в том же виде при последующих чтениях в рамках той же транзакции. Это предотвращает грязные и неповторяющиеся чтения, но не защищает от "фантомных чтений" (phantom reads).
SERIALIZABLE: Самый высокий уровень изоляции, предотвращающий грязные, неповторяющиеся и фантомные чтения. Транзакции выполняются таким образом, что результат эквивалентен последовательному выполнению транзакций.
Эти уровни изоляции позволяют настроить баланс между производительностью и надежностью в зависимости от требований к базе данных и приложения.
Last updated