Ответ
Атомарность (Atomicity) — это первое и фундаментальное свойство транзакции в ACID-модели, гарантирующее, что транзакция выполняется как единое целое — либо все ее операции будут успешно применены к базе данных, либо ни одна из них.
Простая аналогия: Перевод денег между счетами. Операция состоит из двух шагов: списание с одного счета и зачисление на другой. Атомарность гарантирует, что либо оба шага выполнятся, либо не выполнится ни один. Ситуация, когда деньги списались, но не зачислились, невозможна.
Ключевой принцип: "All or Nothing" (Все или ничего).
Как это работает:
- Начало транзакции.
- Выполнение операций (INSERT, UPDATE, DELETE, SELECT).
- Фиксация (COMMIT): Если все операции успешны, их результаты окончательно сохраняются в базе данных. Транзакция завершена.
- Откат (ROLLBACK): Если на любом этапе возникает ошибка (сбой системы, нарушение ограничения целостности, явная команда
ROLLBACK), все изменения, сделанные в рамках этой транзакции, отменяются, и база данных возвращается в состояние, которое было до начала транзакции.
Пример на SQL:
START TRANSACTION; -- Начало транзакции
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1; -- Списание
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2; -- Зачисление
-- Предположим, здесь происходит сбой сети
COMMIT; -- Фиксация изменений. Если до этой строки не дойдут, автоматически выполнится ROLLBACK.
Техническая реализация: Для обеспечения атомарности СУБД использует журнал транзакций (WAL - Write-Ahead Logging). Перед тем как изменения будут записаны в основные таблицы, информация о них (что и как нужно изменить или откатить) записывается в устойчивое хранилище (лог). Это позволяет повторить изменения при COMMIT или откатить их при ROLLBACK даже после сбоя.
Последствия нарушения атомарности: Потеря данных, финансовые убытки, нарушение целостности данных (например, появление "висящих" ссылок).
Атомарность vs Изолированность (Isolation): Часто возникает путаница.
- Атомарность гарантирует целостность транзакции с точки зрения ее самой (все или ничего).
- Изолированность гарантирует целостность с точки зрения параллельных транзакций (чтобы они не мешали друг другу).