На рис. 15.5 показаны транзакции A и B, которые выполняются для кортежей со счетами (табл. 9.1). При этом транзакция A суммирует балансы, транзакция B производит перевод суммы 10 со счета 3 на счет 1. Полученный в итоге транзакции A результат 110, очевидно, неверен, и если он будет записан в базе данных, то в ней может возникнуть проблема несовместимости. В таком случае говорят, что транзакция A встретилась с несовместимым состоянием и на его основе был выполнен несовместимый анализ. Обратите внимание на следующее различие между этим примером и предыдущим: здесь не идет речь о зависимости транзакции A от транзакции B, так как транзакция B выполнила все обновления до того, как транзакция A извлекла СЧЕТ 3.
табл. 15.1 Остатки на счетах до выполнения транзакций.
Счет | СЧЕТ 1 | СЧЕТ 2 | СЧЕТ 3 |
Остаток |
Транзакция A | Время | Транзакция B |
Извлечение кортежа СЧЕТ 1: СУММА = 40 | t1 | – |
Извлечение кортежа СЧЕТ 1: СУММА = 90 | t2 | – |
– | t3 | Извлечение кортежа СЧЕТ 3: |
– | t4 | Обновление кортежа СЧЕТ 3: 30 ® 20 |
– | t5 | Извлечение кортежа СЧЕТ 1: |
– | t6 | Обновление кортежа СЧЕТ 1: 40 ® 50 |
– | t7 | Завершение выполнения транзакции |
Извлечение кортежа СЧЕТ 3: СУММА = 110 (а не 120) | t8 | – |
рис. 15.5. Транзакция A выполнила несовместимый анализ.