Sobes.tech
Назад к вопросам
Junior — Middle
67

Могли бы вы объяснить, что подразумевается под Phantom read в контексте транзакций и баз данных?

Ответ от нейросети

sobes.tech AI

Phantom read — это ситуация в транзакциях, когда при повторном выполнении одного и того же запроса в рамках одной транзакции появляются новые строки, которые не были видны при первом чтении.

Пример:

  1. Транзакция T1 выполняет запрос SELECT * FROM orders WHERE status = 'new' и получает 5 записей.
  2. Пока T1 не завершена, другая транзакция T2 добавляет новую запись с status = 'new' и коммитит изменения.
  3. Если T1 повторит тот же запрос, она увидит уже 6 записей — новая строка, появившаяся "фантомом".

Phantom read возникает из-за того, что диапазон строк, соответствующих условию запроса, изменился между двумя чтениями.

Чтобы избежать phantom read, используют уровень изоляции транзакций SERIALIZABLE, который блокирует диапазоны данных, предотвращая появление новых строк в промежутке между чтениями. На уровне READ COMMITTED или REPEATABLE READ фантомы могут возникать.