Эффект фиктивных элементов несколько отличается от предыдущих транзакций тем, что здесь за один шаг выполняется достаточно много операций - чтение одновременно нескольких строк, удовлетворяющих некоторому условию.
Транзакция A дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция B, которая добавляет новую строку, удовлетворяющую условию отбора.
| Время | Транзакция A | Транзакция B |
| Выборка строк, удовлетворяющих условию .
WHERE = TRUE
(Отобрано n строк)
| --- |
| --- | Вставка новой строки, удовлетворяющей условию .
WHERE = TRUE
|
| --- | COMMIT |
| Выборка строк, удовлетворяющих условию .
WHERE = TRUE
(Отобрано n+1 строк)
| --- |
| COMMIT | --- |
| Появились строки, которых раньше не было |
Результат. Транзакция A не знает о существовании транзакции B, и, т.к. сама она не меняет ничего в базе данных, то ожидает, что после повторного отбора будут отобраны те же самые строки. Транзакция A в двух одинаковых выборках строк получила разные результаты.
.
WHERE
WHERE






