Что происходит с данными при откате транзакции в базе данных
Краткий ответ
Откат транзакции отменяет все изменения, сделанные внутри неё, возвращая базу данных в состояние до начала транзакции. Это обеспечивает целостность данных и предотвращает частичные обновления при ошибках.
Развёрнуто
Краткий ответ
Откат транзакции полностью отменяет все операции, выполненные в её рамках, восстанавливая исходное состояние базы данных. Это гарантирует, что изменения не будут частично применены при возникновении ошибок или исключений.
Как это работает
В SQL и большинстве систем управления базами данных (СУБД) транзакция — это набор операций, которые выполняются как единое целое. При вызове команды ROLLBACK происходит отмена всех изменений, внесённых в рамках текущей транзакции. Это значит, что любые INSERT, UPDATE или DELETE операции не будут сохранены в базе данных.
Операция отката защищает данные от неконсистентного состояния, обеспечивая атомарность (одно из свойств ACID) — либо все изменения применяются, либо ни одного.
| Действие | Результат после коммита (COMMIT) |
Результат после отката (ROLLBACK) |
|---|---|---|
| Добавление записи | Запись сохраняется в базе | Запись не сохраняется |
| Изменение данных | Изменения фиксируются | Изменения отменяются |
| Удаление записи | Запись удаляется из базы | Запись остаётся без изменений |
Пример
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
-- Возникла ошибка или отмена операции
ROLLBACK;
В этом примере оба обновления балансов не сохранятся, и база вернётся к состоянию до начала транзакции.
Что важно знать на собеседовании
- Откат обеспечивает атомарность транзакции — все изменения либо применяются полностью, либо отменяются.
- После
ROLLBACKбаза данных возвращается к состоянию до начала транзакции. - Откат используется для обработки ошибок и предотвращения неконсистентных данных.
- Не все операции в СУБД могут быть откатаны (например, DDL-запросы в некоторых СУБД).
- Знание работы транзакций и отката критично для тестирования устойчивости и корректности приложений.
Тема: SQL и базы данных | Уровень: senior