Основы работы с транзакциями в SQL

Основы работы с транзакциями в SQL включают команды и принципы, которые обеспечивают правильное выполнение операций над данными. Вот ключевые аспекты:

Начало транзакции

Транзакция начинается с команды, которая инициирует новый контекст транзакции. В разных СУБД могут использоваться разные команды:

  • SQL Server, PostgreSQL:

    BEGIN TRANSACTION;
  • MySQL:

    START TRANSACTION;

Выполнение операций

В рамках транзакции выполняются различные SQL-запросы, такие как:

  • INSERT: Добавление новых записей.

    INSERT INTO table_name (column1, column2) VALUES (value1, value2);
  • UPDATE: Обновление существующих записей.

    UPDATE table_name SET column1 = value1 WHERE condition;
  • DELETE: Удаление записей.

    DELETE FROM table_name WHERE condition;

Фиксация транзакции (Commit)

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

COMMIT;

Откат транзакции (Rollback)

Если возникла ошибка или нужно отменить изменения, которые были сделаны в рамках транзакции, используется команда ROLLBACK. Это откатывает все изменения, сделанные с начала транзакции.

ROLLBACK;

Сохранение точек (Savepoints)

Сохранение точек позволяет установить промежуточные точки в транзакции, к которым можно откатиться, не отменяя всю транзакцию.

  • Создание точки сохранения:

    SAVEPOINT savepoint_name;
  • Откат к точке сохранения:

    ROLLBACK TO SAVEPOINT savepoint_name;
  • Удаление точки сохранения:

    RELEASE SAVEPOINT savepoint_name;

Изолированность транзакций

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

  • READ UNCOMMITTED: Позволяет читать необработанные изменения других транзакций. Это может приводить к грязным чтениям.

  • READ COMMITTED: Позволяет читать только подтвержденные изменения других транзакций. Это предотвращает грязные чтения, но не защищает от неповторяющихся чтений.

  • REPEATABLE READ: Гарантирует, что транзакция увидит те же данные при повторных чтениях в рамках одной транзакции. Это предотвращает грязные и неповторяющиеся чтения, но не защищает от фантомных чтений.

  • SERIALIZABLE: Самый строгий уровень изоляции, предотвращающий грязные, неповторяющиеся и фантомные чтения. Транзакции выполняются так, чтобы результат был эквивалентен последовательному выполнению транзакций.

Пример использования транзакций

BEGIN TRANSACTION;

-- Выполнение операций
INSERT INTO accounts (account_id, balance) VALUES (1, 1000);
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;

-- Фиксация транзакции
COMMIT;

Этот пример показывает, как начать транзакцию, выполнить несколько операций и затем зафиксировать все изменения.

Правильное использование транзакций помогает поддерживать целостность и согласованность данных в базе данных.

Last updated