125
Момент времени
Задача 1
Задача 2
1
UPDATE t1 SET a1 = 5
2
UPDATE t1 SET a1 = 2
3
SELECT a1 FROM t1
В результате оператор SELECT в
первой задаче выдаст зна-
чение 2, а не ожидаемое значение 5, т. е. результат выполнения
оператора UPDATE в первой задаче будет потерян.
6.2.2. Преждевременное чтение
Другой проблемой является преждевременное (незафиксиро-
ванное) чтение (dirty read), иллюстрируемое следующей таблицей.
Момент времени
Задача 1
Задача 2
1
UPDATE t1 SET a1 = 5
2
COMMIT
3
UPDATE t1 SET a1 = 2
4
SELECT a1 FROM t1
5 ROLLBACK
В этом примере задача 2 прочитала значение a1 до того, как
оно
было зафиксировано, и в дальнейшем будет использовать
ошибочное значение, равное 2, а не восстановленное значение 5.
6.2.3. Неповторяющееся чтение
Продемонстрируем теперь еще одну проблему, заключающу-
юся в различных результатах выборки данных в разные моменты
времени (unrepeatable read).
Момент времени
Задача 1
Задача 2
1
UPDATE t1 SET a1 = 5
2 COMMIT
3
SELECT a1 FROM t1
4
UPDATE t1 SET a1 = 2
5 COMMIT
6
SELECT a1 FROM t1
В этом примере задача 2 читает
только зафиксированные
результаты, однако в разные моменты времени один и тот же
запрос в задаче 2 дает
разные результаты, т. е. с точки зрения
этой задачи данные в базе данных являются несогласованными в
том смысле,
что нельзя определить, какие же из них являются
корректными.