К более тонким проблемам изолированности транзакций относится так называемая проблема кортежей-«фантомов», приводящая к ситуациям, которые также противоречат изолированности пользователей. Рассмотрим сценарий, показанный на рис. 13.4.
Рис. 13.4. Проблема фантомов
В момент времени t1
транзакция T1
выполняет оператор выборки кортежей таблицы Tab
с условием выборки S
(т.е. выбирается часть кортежей таблицы Tab, удовлетворяющих условию S). До завершения транзакции T1
в момент времени t2
>
t1
транзакция T2
вставляет в таблицу Tab
новый кортеж r, удовлетворяющий условию S, и успешно завершается. В момент времени t3
>
t2
транзакция T1
повторно выполняет тот же оператор выборки, и в результате появляется кортеж, который отсутствовал при первом выполнении оператора.
Конечно, такая ситуация противоречит идее изолированности транзакций и может возникнуть даже на третьем уровне изолированности транзакций. Чтобы избежать появления кортежей-фантомов, требуется более высокий «логический» уровень изоляции транзакций. Идеи требуемого механизма (предикатные синхронизационные блокировки) появились также еще во время выполнения проекта System R, но в большинстве систем не реализованы.