Неповторяемое считывание
Транзакция A дважды читает одну и ту же строку. Между этими чтениями вклинивается транзакция B, которая изменяет значения в строке.
Чтение | --- | |
--- | Чтение | |
--- | Запись | |
--- | Фиксация транзакции | |
Повторное чтение | --- | |
Фиксация транзакции | --- | |
Транзакция A ничего не знает о существовании транзакции B, и, т.к. сама она не меняет значение в строке, то ожидает, что после повторного чтения значение будет тем же самым.
Результат. Транзакция A работает с данными, которые, с точки зрения транзакции A, самопроизвольно изменяются.
Транзакция A дважды читает одну и ту же строку. Между этими чтениями вклинивается транзакция B, которая изменяет значения в строке.
S-блокировка - успешна | --- | |
Чтение | --- | |
--- | X-блокировка - отвергается | |
--- | Ожидание… | |
Повторное чтение | Ожидание… | |
Фиксация транзакции (Блокировка снимается) |
Ожидание… | |
--- | X-блокировка - успешна | |
--- | Запись | |
--- | Фиксация транзакции
|
|
Результат. Транзакция B притормозилась до окончания транзакции A. В результате транзакция A дважды читает одни и те же данные правильно. После окончания транзакции A, транзакция B продолжила работу в обычном режиме.