论坛: 编程破解 标题: 数据库封锁协议问题 复制本贴地址    
作者: xdy [xdy]    论坛用户   登录
我正在学数据库,现在我在书上碰到这样一个问题:书上定义一级封锁协议中,不能保证可重复读和不读“脏”数据。
但是下面有一个问题,是一个订购飞机票的问题,从甲乙两地各买一张机票,开始的时候剩余16张票,既A=16。假设T1从甲买机票,设T2从乙买机票。由于并发操作,如果不加锁则出现乙事务修改A并写回后覆盖了甲事务的修改,则数据不一致,以下是给数据给锁的问题:
事务T1的时候 (1)xclock A (2)读A=16 (3)把A-1赋值给A,写回A=15,commit ,unlock
事务T2的时候 xclock A,等待,等待,等待,等待,获得xclock A,读A=15,把A-1赋值给A,写回A=14,commit,unloc
以上的操作可以避免丢失修改,不能保证可重读我可以理解。但是为什么不能保证不读“脏”数据呢???
我们书上的读“脏”数据是这样定义的:读“脏”数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某中原因被撤消,这时T1已经修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就是“脏”数据。
我觉得以上的“一级封锁协议不能保证读’脏‘数据”和以上的脏数据的概念有冲突,不能理解。
忘知道的人给我指点。
我想描述的详细点,问题很长。大家耐心点啊!先谢了:)





[此贴被 项怀诚(xdy) 在 11月28日17时22分 编辑过]

地主 发表时间: 11/28 17:41

回复: xdy [xdy]   论坛用户   登录
顶一下
希望有问帮我解决解决

B1层 发表时间: 11/30 21:03

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号