Перекос записи (write skew)
Аномалия конкурентности: две транзакции читают пересекающиеся данные и обе обновляют их на основе увиденного, а итоговое состояние оказывается некорректным, хотя каждая транзакция изолирована. Snapshot isolation это допускает, SERIALIZABLE — нет.
Классический пример: правило больницы «на дежурстве должен быть хотя бы один врач». Транзакция 1: врач A проверяет, можно ли взять отгул, — count(on_call) = 2, можно. Транзакция 2: врач B делает то же самое — тоже 2, можно. Обе ставят on_call = false. Итог: на дежурстве ноль врачей. Обе видели состояние с двумя врачами, обе были изолированы и успешно зафиксированы, но вместе дали недопустимый результат. Защита: изоляция SERIALIZABLE (SSI), явные блокировки строк (FOR UPDATE), проверка ограничений на уровне приложения. PostgreSQL в режиме SERIALIZABLE обнаруживает write skew и откатывает одну из транзакций.