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

Что будет при откате транзакции

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

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

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

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

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

Пример

Рассмотрим пример с банковским переводом. Допустим, у нас есть две операции в транзакции:

  1. Списание 100 единиц с одного счета.
  2. Зачисление 100 единиц на другой счет.

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

Как это работает

При откате транзакции база данных использует журнал транзакций, чтобы отменить все изменения, сделанные в рамках этой транзакции. Журнал транзакций — это специальная структура данных, которая записывает все изменения, вносимые в базу данных. Это позволяет базе данных "откатить" изменения, если это необходимо.

Пример кода

Рассмотрим пример на языке SQL, который демонстрирует откат транзакции:

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

Зачем это нужно

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

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

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

Твои заметки