Что такое Phantom read

«Что такое Phantom read» — вопрос из категории Базы данных, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Пример в SQL:

-- Транзакция 1
BEGIN TRANSACTION;
SELECT * FROM users WHERE age > 20; -- Допустим, вернуло 5 строк

-- Транзакция 2 (параллельно)
INSERT INTO users (name, age) VALUES ('New User', 25);

-- Транзакция 1 повторяет запрос
SELECT * FROM users WHERE age > 20; -- Теперь вернет 6 строк
COMMIT;

В Android это может проявляться при работе с Room или SQLite, если не использовать правильный уровень изоляции (REPEATABLE READ или SERIALIZABLE).