Что означает свойство атомарности (Atomicity) в ACID?

«Что означает свойство атомарности (Atomicity) в ACID?» — вопрос из категории Базы данных, который задают на 22% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Атомарность (Atomicity) — это первое и фундаментальное свойство транзакции в ACID-модели, гарантирующее, что транзакция выполняется как единое целое — либо все ее операции будут успешно применены к базе данных, либо ни одна из них.

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

Ключевой принцип: "All or Nothing" (Все или ничего).

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

  1. Начало транзакции.
  2. Выполнение операций (INSERT, UPDATE, DELETE, SELECT).
  3. Фиксация (COMMIT): Если все операции успешны, их результаты окончательно сохраняются в базе данных. Транзакция завершена.
  4. Откат (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): Часто возникает путаница.

  • Атомарность гарантирует целостность транзакции с точки зрения ее самой (все или ничего).
  • Изолированность гарантирует целостность с точки зрения параллельных транзакций (чтобы они не мешали друг другу).