Что такое ACID и что означает каждая буква
Что проверяют
Знаете ли вы, что транзакция это не просто пара запросов между открытием и коммитом, и различаете ли, какие гарантии даёт сама база, а какие обязан обеспечить код. Для бэкенда на C# вопрос почти всегда продолжается практикой: как это выглядит через EF Core, TransactionScope и уровни изоляции.
Как отвечать
Расшифровать четыре буквы и каждую сразу привязать к работе.
Atomicity: транзакция применяется целиком либо не применяется вовсе, откат возвращает состояние на момент начала. Один вызов SaveChanges в EF Core оборачивается в транзакцию сам, два вызова подряд уже нет, их объединяют явным BeginTransaction.
Consistency: на коммите выполнены все ограничения схемы, то есть ключи, внешние ключи, CHECK и триггеры. Правило вроде «остаток не уходит в минус» база держит, только если оно выражено ограничением, иначе за него отвечает приложение.
Isolation: насколько параллельные транзакции видят чужую незавершённую работу. Это не флаг, а шкала уровней от READ UNCOMMITTED до SERIALIZABLE, и каждый уровень допускает свой набор аномалий: грязное чтение, неповторяемое чтение, фантомы.
Durability: после подтверждённого коммита изменения переживут падение процесса и потерю питания, потому что записи журнала сброшены на диск раньше, чем клиент получил ответ.
Сильный финал: за изоляцию платят блокировками, ожиданиями и откатами, а на границе двух баз или сервисов ACID заканчивается и начинаются саги с компенсациями.
Где спотыкаются
Пересказывают Consistency как «данные остались правильными» и не могут назвать, кто именно эту правильность проверяет. Ответ про ограничения схемы отличает того, кто работал с базой, от того, кто выучил акроним.
Говорят, что изоляция полностью скрывает чужие транзакции. Тогда следующий вопрос про уровень по умолчанию и про то, почему на READ COMMITTED один и тот же SELECT внутри транзакции возвращает разные строки, заканчивает разговор.
Считают, что ORM решает всё сам. Повтор при взаимоблокировке, транзакция, открытая на время внешнего HTTP-вызова, и отсутствие оптимистичной блокировки через rowversion всплывают уже на проде, а не на ревью.