❓ Что такое phantom reads в контексте работы с БД?
Phantom reads (фантомные чтения) — это ситуация, когда одна транзакция повторно выполняет запрос, возвращающий множество строк, и видит новые строки, которые были добавлены другой транзакцией за время выполнения первой. Такие изменения могут влиять на результаты выборки, вызывая несогласованность данных.
📌 Пример:
- Транзакция A выполняет запрос: SELECT * FROM orders WHERE amount > 100;
- В это время транзакция B добавляет новую запись: INSERT INTO orders (id, amount) VALUES (10, 150); и фиксирует изменения (COMMIT).
- Транзакция A повторяет свой запрос: SELECT * FROM orders WHERE amount > 100;
- Теперь в результате запроса появляется новая запись с id = 10, которая не была видна в первой выборке.
Фантомные чтения возможны на уровнях изоляции ниже SERIALIZABLE. Уровень REPEATABLE READ защищает от dirty и non-repeatable reads, но не от фантомных. Только уровень SERIALIZABLE гарантирует полную консистентность, исключая фантомные чтения за счёт блокировки или иного способа предотвращения изменений в диапазонах данных.
Post #678
1.89K
- 👍 8
- 🔥 4
- ❤ 2
- 💯 2