#transactions #ansi #isolation-level
Вопрос:
Фрагменты из Критики уровней изоляции ANSI SQL о причинах запрета грязных записей (P0).
Грязно пишет:
Транзакция T1 изменяет элемент данных. Другая транзакция T2 затем дополнительно изменяет этот элемент данных, прежде чем T1 выполнит ФИКСАЦИЮ или ОТКАТ. Если затем T1 или T2 выполнят ОТКАТ, неясно, каким должно быть правильное значение данных.
Причина:
Как обсуждалось в [GLPT, BHG] и в других местах, автоматический откат транзакций является еще одной насущной причиной важности P0. Без защиты от P0 система не сможет отменить обновления, восстановив предыдущие изображения. Рассмотрим историю: w1[x] w2[x] a1. Вы не хотите отменять w1[x], восстанавливая его прежний образ x, потому что это уничтожит обновление w2. Но если вы не восстановите его предыдущее изображение, а транзакция T2 позже прервется, вы также не сможете отменить w2[x], восстановив его предыдущее изображение!
Мой вопрос в том, почему мы не можем отменить w2[x], восстановив его предыдущее изображение в этом случае? Означает ли это, что каждая транзакция не хранит свое индивидуальное изображение до (значения x)? Тогда что такое изображение перед T2? Является ли это w1[x] (значение X перед w2[x])? Может ли кто-нибудь подробно описать этот случай? Я знаю, что грязная писанина-это не настоящий случай, но тем не менее.