Рассмотрим сценарий совместного выполнения транзакций T1
и T2, показанный на рис. 13.2. В момент времени t1
транзакция T1
изменяет объект базы данных o
(выполняет операцию W(o)). В момент времени t2
>
t1
транзакция T2
читает объект o
(выполняет операцию R(o)). Поскольку транзакция T1
еще не завершена, транзакция T2
видит несогласованные «грязные» данные. В частности, в момент времени t3
>
t2
транзакция T1
может завершиться откатом (например, по причине нарушения ограничений целостности).
Рис. 13.2. «Грязные» чтения
Эта ситуация тоже не соответствует требованию изолированности пользователей (каждый пользователь начинает свою транзакцию при согласованном состоянии базы данных и имеет право видеть только согласованные данные). Чтобы избежать ситуации чтения "грязных" данных, до завершения транзакции T1, изменившей объект базы данных o, никакая другая транзакция не должна читать объект o
(например, достаточно заблокировать доступ по чтению к объекту o
до завершения изменившей его транзакции T1).