Ответ
Атомарность (Atomicity) — это первое свойство транзакции в ACID-модели, гарантирующее, что последовательность операций выполняется как единое неделимое целое. Транзакция либо завершается полностью (commit), либо все её изменения полностью откатываются (rollback), как если бы она никогда не начиналась.
Суть: Не допускаются промежуточные состояния, когда часть операций выполнена, а часть — нет. Это критически важно для сохранения целостности данных.
Классический пример — перевод денег между счетами в SQL:
BEGIN TRANSACTION; -- Начало атомарной транзакции
-- 1. Списать сумму со счета отправителя
UPDATE accounts SET balance = balance - 100.00 WHERE id = 1;
-- 2. Зачислить сумму на счет получателя
UPDATE accounts SET balance = balance + 100.00 WHERE id = 2;
-- Если обе операции успешны, фиксируем изменения
COMMIT;
-- Если на любом этапе произошла ошибка (например, недостаточно средств или разрыв соединения),
-- выполняется автоматический ROLLBACK, и балансы обоих счетов остаются неизменными.
Как атомарность обеспечивается в БД?
Система использует журнал транзакций (WAL - Write-Ahead Logging). Все изменения сначала записываются в лог, и только после успешной записи всех операций и команды COMMIT применяются к основным данным. При сбое СУБД может восстановить согласованное состояние, откатив незавершённые транзакции по логу.
Атомарность за пределами БД:
- В многопоточном программировании: операция над разделяемой переменной является атомарной, если её нельзя прервать другим потоком (например, инкремент с использованием
AtomicIntegerв Java). - В распределённых системах: достигается с помощью более сложных протоколов (например, двухфазный commit - 2PC или алгоритмы консенсуса), но часто в ущерб производительности.
Для QA: При тестировании необходимо проверять сценарии прерывания транзакций (отключение сети, перезагрузка сервера) и убеждаться, что данные не остаются в частично изменённом состоянии.