Что такое фантомное чтение (phantom read)?
Уровень: Senior
Ответ
Это явление, когда транзакция при повторном выполнении запроса с тем же условием видит новые или исчезнувшие строки, которых не было в первый раз. Например, транзакция A выбрала "все заказы за сегодня" и получила N строк, потом транзакция B вставила еще один заказ с сегодняшней датой и закоммитила, и транзакция A снова выполняет тот же SELECT и получает N+1 строку – эта «лишняя» строка и называется фантомом. Фантомные чтения возможны на уровне Repeatable Read, но исключаются на Serializable (где транзакции действуют как если бы последовательно). Некоторые СУБД с MVCC (например, PostgreSQL) на Repeatable Read также избегают фантомов, предоставляя снимок данных.