Работа с транзакциями. ACID. Уровни изолированности.

Работа с транзакциями, принципы ACID и уровни изоляции — ключевые аспекты управления базами данных, обеспечивающие их корректность и надежность. Давайте рассмотрим их подробнее.

1. Работа с транзакциями

Транзакция — это последовательность операций, выполняемых как единое целое. Основные операции с транзакциями включают:

  • Начало транзакции: Инициализация нового контекста транзакции.

    BEGIN TRANSACTION;
  • Выполнение операций: Выполнение SQL-запросов, таких как INSERT, UPDATE, DELETE.

  • Фиксация транзакции (Commit): Сохранение всех изменений, выполненных в рамках транзакции.

    COMMIT;
  • Откат транзакции (Rollback): Отмена всех изменений, выполненных в рамках транзакции, если возникла ошибка или требуется откат.

    ROLLBACK;
  • Сохранение точек (Savepoints): Создание точек для частичного отката транзакции.

    SAVEPOINT savepoint_name;
    ROLLBACK TO SAVEPOINT savepoint_name;
    RELEASE SAVEPOINT savepoint_name;

2. Принципы ACID

ACID — это набор свойств, которые транзакция должна соблюдать для обеспечения надежности базы данных:

  • Atomicity (Атомарность): Транзакция должна быть выполнена полностью или не выполнена вовсе. Если транзакция не завершается успешно, все изменения откатываются.

  • Consistency (Согласованность): Транзакция должна переводить базу данных из одного согласованного состояния в другое, соблюдая все ограничения и правила целостности данных.

  • Isolation (Изолированность): Одновременно выполняемые транзакции должны быть изолированы друг от друга, и изменения одной транзакции не должны быть видны другим до её завершения.

  • Durability (Долговечность): После завершения транзакции её изменения сохраняются и не теряются, даже в случае сбоя системы.

3. Уровни изоляции транзакций

Уровни изоляции определяют, как транзакции видят изменения, внесенные другими транзакциями. SQL стандарт предлагает четыре уровня изоляции:

  1. READ UNCOMMITTED: Самый низкий уровень изоляции, позволяющий читать необработанные изменения других транзакций. Это может привести к "грязным чтениям" (dirty reads).

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
  2. READ COMMITTED: Гарантирует, что транзакция читает только подтвержденные изменения. Это предотвращает грязные чтения, но не защищает от "неповторяющихся чтений" (non-repeatable reads).

    SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
  3. REPEATABLE READ: Гарантирует, что если транзакция читает данные, то она увидит их в том же виде при последующих чтениях в рамках той же транзакции. Это предотвращает грязные и неповторяющиеся чтения, но не защищает от "фантомных чтений" (phantom reads).

    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
  4. SERIALIZABLE: Самый высокий уровень изоляции, предотвращающий грязные, неповторяющиеся и фантомные чтения. Транзакции выполняются таким образом, что результат эквивалентен последовательному выполнению транзакций.

    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Эти уровни изоляции позволяют настроить баланс между производительностью и надежностью в зависимости от требований к базе данных и приложения.

Last updated