Вопрос проверяет понимание конкурентного доступа к данным и последствий race condition в многопользовательских системах.
При конкурентных обновлениях несколько транзакций могут перезаписывать изменения друг друга. Это приводит к потере данных или некорректному итоговому состоянию. Такие ошибки сложно воспроизводить и отлаживать. Без специальных механизмов защиты система становится недетерминированной.
В конкурентной среде несколько запросов могут читать и изменять одну и ту же запись почти одновременно.
Перед детализацией важно понимать, что БД не «угадывает» намерения бизнес-логики.
Потеря обновлений (lost update)
транзакция A читает значение
транзакция B обновляет его
транзакция A записывает устаревшие данные
Нарушение бизнес-инвариантов
баланс уходит в минус
превышаются лимиты
нарушаются ограничения предметной области
Непредсказуемое поведение
ошибки проявляются только под нагрузкой
баги «плавающие» и редкие
Сложность диагностики
логи не показывают конфликт
состояние БД выглядит валидным, но неверным
balance = get_balance(user_id)
balance -= amount
save_balance(user_id, balance)
Два параллельных запроса могут успешно выполнить этот код и потерять одно списание.
блокировки строк
атомарные UPDATE
оптимистическая блокировка (version, revision)
корректный уровень изоляции
Конкурентные обновления без контроля приводят к скрытым и критичным ошибкам, особенно в финансовых и счётных системах.