Неповторяемое считывание

Проблема несовместимого анализа

Проблема несовместимого анализа включает несколько различных вариантов:

  • Неповторяемое считывание.
  • Фиктивные элементы (фантомы).
  • Собственно несовместимый анализ.

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

Транзакция A Время Транзакция B
Чтение ---
--- Чтение
--- Запись
--- Фиксация транзакции
Повторное чтение ---
Фиксация транзакции ---
Неповторяемое считывание    

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

Результат. Транзакция A работает с данными, которые, с точки зрения транзакции A, самопроизвольно изменяются.

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

Эффект фиктивных элементов несколько отличается от предыдущих транзакций тем, что здесь за один шаг выполняется достаточно много операций - чтение одновременно нескольких строк, удовлетворяющих некоторому условию.

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

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

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

Результат. Транзакция A в двух одинаковых выборках строк получила разные результаты.