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

阅读: 评论:0

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

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

一级封锁协议:在修改时加上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锁,由于锁的冲突,不会有其他事务读该数据,不会导致其他事务不可重复读。

本文发布于:2024-01-31 07:41:24,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170665808726779.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:协议   数据
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23