Что такое ACID в базах данных и что означает каждая характеристика
Что проверяют
Знаете ли вы, что стоит за каждой буквой, и можете ли привести пример нарушения. Расшифровки без примеров недостаточно.
Как отвечать
A, атомарность. Транзакция выполняется целиком или не выполняется вовсе. Перевод денег это списание и зачисление: если второе не удалось, первое обязано откатиться. Обеспечивается журналом отмены.
C, согласованность. Транзакция переводит базу из одного корректного состояния в другое: ограничения, внешние ключи, уникальность и триггеры не нарушаются. Формально это ответственность и базы, и приложения: правило «баланс не может быть отрицательным» база знает, только если его записали ограничением.
I, изоляция. Параллельные транзакции не видят промежуточных состояний друг друга. Насколько строго, задаёт уровень изоляции: от READ COMMITTED, где нет грязного чтения, до SERIALIZABLE, где результат эквивалентен какому-то последовательному порядку.
D, долговечность. Зафиксированное переживает падение сервера. Обеспечивается журналом упреждающей записи: изменения попадают в журнал на диск до подтверждения клиенту.
Полезно добавить, что у каждой буквы своя цена. Строгая изоляция уменьшает параллелизм, а гарантия долговечности требует записи на диск, поэтому в распределённых системах от части свойств осознанно отказываются в пользу доступности, и появляется согласованность в конечном счёте.
Где спотыкаются
Расшифровывают, но не могут привести пример нарушения.
Путают согласованность с изоляцией.
Считают, что ACID автоматически есть в любой базе: у многих NoSQL гарантии другие или настраиваемые.
Не знают, что уровень изоляции по умолчанию не самый строгий.