不可重复读(续) 例如:
T1 ① R(A)=50 R(B)=100 T2 ?T1读取B=100进行运算 ?T2读取同一数据B,对其进行修改后将B=200写回数据R(B)=100 B←B*2 库。 ?T1为了对读取值校对重读B,B已为200,与第一次读取值不一致 求和=150 ② W(B)=200 ③ R(A)=50 R(B)=200 求和=250 (验算不对) 不可重复读 An Introduction to Database System 不可重复读(续) (2)事务T1按一定条件从数据库中读取了某些数据记录后,
事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘地消失了。
(3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。
后两种不可重复读有时也称为幻影现象(Phantom Row)
An Introduction to Database System 3. 读“脏”数据 读“脏”数据是指:
?事务T1修改某一数据,并将其写回磁盘 ?事务T2读取同一数据后,T1由于某种原因被撤销 ?这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致
?T2读到的数据就为“脏”数据,即不正确的数据
An Introduction to Database System 读“脏”数据(续) 例如
T1 ① R(C)=100 C←C*2 W(C)=200 ② R(C)=200 T2 ?T1将C值修改为200,T2
读到C为200 ?T1由于某种原因撤销,其修改作废,C恢复原值100 ?这时T2读到的C为200,
③ ROLLBACK 与数据库内容不一致,就是“脏”数据 C恢复为100 读“脏”数据 An Introduction to Database System 并发控制概述(续) ?数据不一致性:由于并发操作破坏了事务的隔离性
?并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不
一致性
?对数据库的应用有时允许某些不一致性,例如有些统计工作涉及数据量很大,读到一些“脏”数据对统计精度没什么影响,可以降低对一致性的要求以减少系统开销 ?参见爱课程网11.1节动画《并发操作带来的数据不一致性》
An Introduction to Database System