为什么一级封锁协议不能解决可重复读和读脏数据?

一级封锁协议:在修改时加上x锁,直到事务结束。读时不用加锁。导致了:

  1. 不可能有两个事务同时对一个数据进行修改,因为x锁与其他锁不相容,所以一级封锁协议可以防止丢失修改
  2. 在事务T1修改数据时,加了x锁。由于读数据不需要加锁,另一个事务T2想要读取该数据,可以直接读,不需要考虑锁的冲突。所以事务T2可能读取脏数据,也可能不可重复读。所以一级封锁协议不能保证可重复读,不能防止读脏数据

二级封锁协议:在一级封锁协议的基础上,如果想读取数据,需要加s锁,读完就释放s锁。这就导致:
1.事务T1在t1时刻读取某数据为a,读完即释放了s锁,但此时事务T1并没有结束。事务T2需要修改数据,加了x锁(由于T1释放了s锁,所以此时没有锁冲突,T2可以修改数据),在事务T2结束时,即t2时刻,才释放x锁。T1在t3时刻再去读取该数据为b,两次读取数据不一致。所以没有解决不可重复度
2.由于在事务T2修改数据时加了x锁,其他事务无法读取该数据,所以其他事务不会读取脏数据。

三级封锁协议:在一级封锁协议基础上,事务T1读取数据时加s锁,直到T1结束释放s锁。这就导致:
1.可以防止丢失修改(参照一级封锁协议)
2.可以防止读脏数据(参照二级封锁协议)
3.在事务T1读取数据时,加了s锁,不可能有其他事务再加x锁修改数据,所以不会导致事务T1不可重复读。同理,在事务T1修改数据时加了x锁,由于锁的冲突,不会有其他事务读该数据,不会导致其他事务不可重复读。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值