Sobes.tech
Junior — Middle

Можете ли да обясните какво се разбира под Phantom read в контекста на транзакциите и базите данни?

sobes.tech AI

Отговор от AI

Фантомно четене — това е ситуация в транзакциите, когато при повторното изпълнение на същия заявка в рамките на една транзакция се появяват нови редове, които не са били видими при първото четене.

Пример:

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

Фантомното четене възниква, защото диапазонът от редове, отговарящи на условието на заявката, се е променил между двете четения.

За да се избегне фантомното четене, се използва нивото на изолация SERIALIZABLE, което блокира диапазоните от данни, предотвратявайки появата на нови редове между четенията. На нивата READ COMMITTED или REPEATABLE READ фантоми могат да се появят.