二级封锁协议与三级封锁协议的区别
我不为 2010-07-23 12:11:18 x锁: 排他锁 被加锁的对象只能被持有锁的事务读取和修改,其他事务无法在该对象上加其他锁,也不能读取和修改该对象
s锁 共享锁 被加锁的对象可以被持锁事务读取,但是不能被修改,其他事务也可以在上面再加s锁。
一级封锁协议:
在事务修改数据的时候加x锁,直到事务结束(提交或者回滚)释放x锁。一级封锁协议可以有效的防止丢失更新,但是不能防止脏读不可重复读的出现。
二级封锁协议:
在一级封锁的基础上事务读数据的时候加s锁,读取之后释放。二级封锁协议可以防止丢失更新,脏读。不能防止不可重复读。
三级封锁协议:
在一级封锁的基础上事务读数据的时候加s锁,直到事务结束释放。二级封锁协议可以防止丢失更新,脏读,不可重复读。
问题:二级封锁协议为什么 不能防止不可重复读。
我的理解是:
二级封锁协议 是在一级封锁协议 基础上进行的。因为一级封锁协议 已经加了 X锁。有根据X锁的定义,只要加了X锁,其他事物既不能读取该对象,也不能修改该对象。所以就不存在 重复读,脏读和丢失更新。
所以只要加了X锁就能防止 重复读,脏读和丢失更新。
有一级封锁就够了。
不知道我的理解错在哪里。