Что такое атомарность в контексте баз данных?

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

Ответ

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

Практический пример на SQL (MySQL/PostgreSQL):

START TRANSACTION;
-- 1. Списать сумму со счета отправителя
UPDATE accounts SET balance = balance - 100.00 WHERE user_id = 1;
-- 2. Зачислить сумму на счет получателя
UPDATE accounts SET balance = balance + 100.00 WHERE user_id = 2;
-- Обе операции должны быть выполнены вместе
COMMIT;
-- Если между UPDATE произойдет ошибка, ROLLBACK отменит первую операцию

Пример реализации в PHP с PDO:

$pdo->beginTransaction();
try {
    $stmt1 = $pdo->prepare("UPDATE accounts SET balance = balance - ? WHERE user_id = ?");
    $stmt1->execute([100.00, 1]);

    $stmt2 = $pdo->prepare("UPDATE accounts SET balance = balance + ? WHERE user_id = ?");
    $stmt2->execute([100.00, 2]);

    $pdo->commit(); // Фиксация обеих операций
    echo "Перевод выполнен атомарно.";
} catch (Exception $e) {
    $pdo->rollBack(); // Полный откат при любой ошибке
    echo "Ошибка перевода. Изменения отменены.";
}

Ключевой вывод: Атомарность защищает от состояний, когда деньги списались, но не зачислились, обеспечивая целостность данных.