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

Что такое транзакции в SQL

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

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

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

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

Основные свойства транзакций (ACID)

  1. Атомарность (Atomicity):

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

    • Обеспечивает, что транзакция переводит базу данных из одного согласованного состояния в другое. Это означает, что после завершения транзакции все бизнес-правила, ограничения и триггеры остаются в силе.
  3. Изолированность (Isolation):

    • Обеспечивает, что параллельно выполняемые транзакции не влияют друг на друга. Изолированность предотвращает "грязное чтение", "неповторяющееся чтение" и "фантомное чтение".
  4. Долговечность (Durability):

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

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

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

BEGIN TRANSACTION;  -- Начало транзакции
​
UPDATE accounts
SET balance = balance - 100
WHERE account_id = 1;  -- Снятие 100 единиц с первого счета
​
​
​
UPDATE accounts
SET balance = balance + 100
WHERE account_id = 2;  -- Зачисление 100 единиц на второй счет
​
​
​
COMMIT;  -- Подтверждение транзакции, изменения сохраняются
  • BEGIN TRANSACTION; — начинает новую транзакцию. Все последующие операции будут частью этой транзакции.
  • UPDATE accounts SET balance = balance - 100 WHERE account_id = 1; — уменьшает баланс первого счета на 100 единиц.
  • UPDATE accounts SET balance = balance + 100 WHERE account_id = 2; — увеличивает баланс второго счета на 100 единиц.
  • COMMIT; — завершает транзакцию, фиксируя все изменения в базе данных.

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

Зачем нужны транзакции

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

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

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

Твои заметки