|
![]() | 作者: 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号