数据库封锁协议

数据库封锁协议

举例:事务A对数据D加了X锁,其他事务都不能再对D加任何锁,A可以对数据D读取或者修改,但其他事务最基本的select 语句还是可以读取数据D,因为最基本的select语句并不用申请任何锁!

一级封锁协议:事务T要修改数据A时必须加X锁,直到T结束才释放锁

可以防止丢失修改的问题,因为有两个事务同时修改时,事务的修改就不会被覆盖
在这里插入图片描述

举例:事务A对数据D加X锁,修改数据D之后,这个时候事务B不能对D加任何锁,但是可以select,B读到数据D=2,此时,A出错,事务回滚,B此时就读到了脏数据。加了二级封锁协议后:事务B要select时必须申请S锁,此时一级协议拦截,就避免读到脏数据。

二级封锁协议:在一级的基础上,要求读取数据A时必须加S锁,读取完马上释放S锁(加上S锁别的事务就不能修改)

可以解决读脏数据问题,因为如果一个事务在对数据 A 进行修改,根据 1 级封锁协议,会加 X 锁,那么就不能再加 S 锁了,也就是不会读入数据。

举例:二级协议中,事务B要select时必须申请S锁,读取后就立马释放锁,那假如这时事务A修改了数据D,事务B再次读取时,读取的数据发生了变化,不可重复读。**加了三级协议后:**事务B读取了数据D,直到事务B结束才释放S锁,所以就避免了不可重复读。

三级封锁协议:在二级的基础上,要求读取数据 A 时必须加 S 锁,直到事务结束了才能释放 S 锁。

可以解决不可重复读的问题,因为读 A 时,其它事务不能对 A 加 X 锁,从而避免了在读的期间数据发生改变。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值