Фиктивные элементы (фантомы)

Транзакция A дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция B, которая добавляет новую строку, удовлетворяющую условию отбора.

Время Транзакция A Транзакция B
S-блокировка строк, удовлетворяющих условию . (Заблокировано n строк) ---
Выборка строк, удовлетворяющих условию . (Отобрано n строк) ---
--- Вставка новой строки, удовлетворяющей условию .
--- COMMIT
S-блокировка строк, удовлетворяющих условию . (Заблокировано n+1 строка) ---
Выборка строк, удовлетворяющих условию . (Отобрано n+1 строк) ---
COMMIT ---
  Появились строки, которых раньше не было  

Результат. Блокировка на уровне строк не решила проблему появления фиктивных элементов.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: