Назад к вопросам
Junior — Middle
67
Могли бы вы объяснить, что подразумевается под Phantom read в контексте транзакций и баз данных?
Ответ от нейросети
sobes.tech AI
Phantom read — это ситуация в транзакциях, когда при повторном выполнении одного и того же запроса в рамках одной транзакции появляются новые строки, которые не были видны при первом чтении.
Пример:
- Транзакция T1 выполняет запрос
SELECT * FROM orders WHERE status = 'new'и получает 5 записей. - Пока T1 не завершена, другая транзакция T2 добавляет новую запись с
status = 'new'и коммитит изменения. - Если T1 повторит тот же запрос, она увидит уже 6 записей — новая строка, появившаяся "фантомом".
Phantom read возникает из-за того, что диапазон строк, соответствующих условию запроса, изменился между двумя чтениями.
Чтобы избежать phantom read, используют уровень изоляции транзакций SERIALIZABLE, который блокирует диапазоны данных, предотвращая появление новых строк в промежутке между чтениями. На уровне READ COMMITTED или REPEATABLE READ фантомы могут возникать.