Проблема потери результатов обновления
Две транзакции по очереди записывают некоторые данные в одну и ту же строку и фиксируют изменения.
Транзакция A
Время
Транзакция B
Потеря результата обновления
Чтение ![]() |
![]() |
--- |
--- | ![]() |
Чтение ![]() |
Запись ![]() |
![]() |
--- |
--- | ![]() |
Запись ![]() |
Фиксация транзакции | ![]() |
--- |
--- | ![]() |
Фиксация транзакции |
Результат. После окончания обеих транзакций, строка




Две транзакции по очереди записывают некоторые данные в одну и ту же строку и фиксируют изменения.
Транзакция A
Время
Транзакция B
Ожидание…
Ожидание…
S-блокировка ![]() |
![]() |
--- |
Чтение ![]() |
![]() |
--- |
--- | ![]() |
S-блокировка ![]() |
--- | ![]() |
Чтение ![]() |
X-блокировка ![]() |
![]() |
--- |
Ожидание… | ![]() |
X-блокировка ![]() |
Ожидание… | ![]() |
Ожидание… |
Обе транзакции успешно накладывают S-блокировки и читают объект





Результат. Обе транзакции ожидают друг друга и не могут продолжаться. Возникла ситуация тупика.