← Назад ко всем вопросам

Какие команды управления транзакциями есть в SQL и как они используются?

1️⃣ Как кратко ответить

В SQL команды управления транзакциями включают BEGIN, COMMIT, ROLLBACK, SAVEPOINT и SET TRANSACTION. BEGIN начинает транзакцию, COMMIT фиксирует изменения, ROLLBACK отменяет изменения, SAVEPOINT создает точку отката внутри транзакции, а SET TRANSACTION устанавливает параметры транзакции. Эти команды обеспечивают целостность данных и позволяют управлять изменениями в базе данных.

2️⃣ Подробное объяснение темы

Транзакции в SQL — это последовательности операций, которые выполняются как единое целое. Они обеспечивают целостность данных и позволяют гарантировать, что все операции внутри транзакции будут выполнены успешно или ни одна из них не будет применена. Это особенно важно в многопользовательских системах, где несколько пользователей могут одновременно изменять данные.

Основные команды управления транзакциями

  1. BEGIN (или START TRANSACTION)

    Эта команда начинает новую транзакцию. Все последующие операции будут частью этой транзакции до тех пор, пока не будет выполнена команда COMMIT или ROLLBACK.

    BEGIN;
    
  2. COMMIT

    Команда COMMIT фиксирует все изменения, сделанные в рамках текущей транзакции, и делает их видимыми для других пользователей. После выполнения COMMIT транзакция завершается.

    COMMIT;
    
  3. ROLLBACK

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

    ROLLBACK;
    
  4. SAVEPOINT

    SAVEPOINT создает промежуточную точку внутри транзакции, к которой можно вернуться с помощью ROLLBACK TO SAVEPOINT. Это позволяет частично отменять изменения, не затрагивая всю транзакцию.

    SAVEPOINT savepoint_name;
    
  5. ROLLBACK TO SAVEPOINT

    Эта команда откатывает транзакцию до указанного SAVEPOINT, отменяя все изменения, сделанные после этой точки.

    ROLLBACK TO SAVEPOINT savepoint_name;
    
  6. SET TRANSACTION

    SET TRANSACTION используется для задания параметров текущей транзакции, таких как уровень изоляции. Уровень изоляции определяет, как изменения, сделанные одной транзакцией, видны другим транзакциям.

    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    

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

Рассмотрим пример, где необходимо перевести деньги с одного банковского счета на другой. Это требует двух операций: снятие денег с одного счета и зачисление на другой. Обе операции должны быть выполнены как единое целое.

BEGIN; ​
-- Снимаем деньги с первого счета
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1; ​
-- Зачисляем деньги на второй счет
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2; ​
-- Фиксируем изменения
COMMIT;

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

BEGIN; ​
-- Снимаем деньги с первого счета
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1; ​
-- Проверяем баланс
IF (SELECT balance FROM accounts WHERE account_id = 1) < 0 THEN &#8203;
    ROLLBACK; &#8203;
ELSE &#8203;
    -- Зачисляем деньги на второй счет
    UPDATE accounts SET balance = balance + 100 WHERE account_id = 2; &#8203;
    -- Фиксируем изменения
    COMMIT; &#8203;
END IF;

Тема: Базы данных
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки