Рассмотрим рис. 11.4, на котором показаны две транзакции А и В, оперирующие записями счетов. Транзакция А суммирует остатки на счетах, транзакция В переносит сумму 10 со счета 3 на счет 1. Продуцируемый А результат 110, очевидно, некорректен, и если бы А должна была записать этот результат в базу данных, она оставила бы фактически базу данных в противоречивом состоянии. Будем говорить, что А «видела» противоречивое состояние базы данных и поэтому провела анализ на противоречивость. Отметим различие между данным и предыдущим примером. Здесь нет проблемы зависимости А от незафиксированных изменений, поскольку В фиксирует все произведенные ею обновления прежде, чем А «увидит» запись СЧЕТА 3.
СЧЕТ 1 | СЧЕТ 2 | СЧЕТ 3 | ||||||
Транзакция А | Время | Транзакция В | ||||||
— | — | |||||||
— | — | |||||||
FETCH СЧЕТ 1 (40): СУММА == 40 | t1 | — | ||||||
— | — | |||||||
FETCH СЧЕТ 2 (50): СУММА = 90 — | t2 | — | ||||||
— | — | |||||||
— | t3 | FETCH СЧЕТ 3 (30) | ||||||
— | — | |||||||
— | t4 | UPDATE СЧЕТ 3: 30®20 | ||||||
— | — | |||||||
— | t5 | FETCH СЧЕТ 1 (40) | ||||||
— | — | |||||||
— | t6 | UPDATEСЧЕТ 1: 40®50 | ||||||
— | — | |||||||
— | t7 | COMMIT | ||||||
— | ||||||||
FETCH СЧЕТ 3 (20): СУММА=110, а не 120 | t8 | |||||||
Рис. 11.4. Транзакция А осуществляет анализ на противоречивость
|
|