Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от AI

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

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

Това е свързано с нивото на изолация на транзакциите: фантомното четене е възможно при ниво READ COMMITTED, но е предотвратено при ниво SERIALIZABLE.

Пример:

-- Транзакция 1
BEGIN;
SELECT * FROM orders WHERE status = 'pending'; -- върна 5 записа
-- Транзакция 2 паралелно добавя нов запис със статус 'pending'
SELECT * FROM orders WHERE status = 'pending'; -- сега ще върне 6 записа
COMMIT;