Феномен фантомов
Этому феномену подвержены транзакции, производящие выборку строк и таблиц базы данных и допускающие добавление к этим таблицам другими транзакциями строк, удовлетворяющих условию выборки. Пример феномена фантомов показан на рис. 18.6.
![]() |
Рис. 18.6. Феномен фантомов
На этом рисунке показано, что в момент времени t0 были образованы две транзакции T1 и T2. В момент времени t1 транзакция T2 выполняет операцию выборки строк из таблицы R по условию c. В момент времени t2 (t2 > t1) транзакция T1 выполняет над таблицей R операцию обновления (вставки или модификации строк), в результате которой в таблице R появляются дополнительные строки, удовлетворяющие условию c. В момент времени t3 (t3 > t2) транзакция T2 повторно выполняет операцию выборки строк из таблицы R по условию c и обнаруживает наличие в результате дополнительных фантомных строк.
В SQL феномен фантомов может наблюдаться у транзакций, выполняемых на уровне изоляции REPEATABLE READ (этот уровень изоляции, как показывает его название, гарантирует отсутствие феномена неповторяемого чтения).
Наконец, для транзакций, выполняемых на уровне изоляции SERIALIZABLE, невозможно и проявление феномена фантомов. Термин serializable (сериализуемый) используется по той причине, что при работе на данному уровне изоляции суммарный эффект выполнения набора транзакций {T1, T2, …, Tn} идентичен эффекту некоторого последовательного выполнения этих транзакций. Это означает предельную изолированность транзакций. Общая картина взаимосвязи уровней изоляции и феноменов транзакций показана на таб. 18.1.
Уровень | Грязное чтение | Неповторяющееся чтение | Фантомы |
READ UNCOMMITTED | Возможно | Возможно | Возможны |
READ COMMITTED | Невозможно | Возможно | Возможны |
REPEATABLE READ | Невозможно | Невозможно | Возможны |
SERIALIZABLE | Невозможно | Невозможно | Невозможны |
Таб. 18.1. Уровни изоляции и феномены