并发控制之封锁协议

本文介绍了数据库事务的封锁协议,包括一级、二级和三级封锁协议,以防止丢失修改、读脏数据和不可重复读等问题。封锁协议通过规定何时申请锁、持锁时间和释放锁的规则,确保并发操作的一致性。不同级别的封锁协议提供了不同级别的事务一致性保障,三级封锁协议能提供最高的一致性。
摘要由CSDN通过智能技术生成

什么是封锁协议

在运用X锁和S锁对数据对象加锁时,需要约定一些规则,这些规则为封锁协议(Locking Protocol)。
何时申请X锁或S锁
持锁时间
何时释放
对封锁方式规定不同的规则,就形成了各种不同的封锁协议,它们分别在不同的程度上为并发操作的正确调度提供一定的保证。

三级封锁协议

1.一级封锁协议
2.二级封锁协议
3.三级封锁协议

一级封锁协议

一级封锁协议

事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
正常结束(COMMIT)
非正常结束(ROLLBACK)
一级封锁协议可防止丢失修改,并保证事务T是可恢复的。
在一级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读“脏”数据。

使用封锁机制解决丢失修改问题

在这里插入图片描述

没有丢失修改
事务T1在读A进行修改之前先对A加X锁
当T2再请求对A加X锁时被拒绝
T2只能等待T1释放A上的锁后获得对A的X锁
这时T2读到的A已经是T1更新过的值15
T2按此新的A值进行运算,并将结果值A=14写回到磁盘。避免了丢失T1的更新。

二级封锁协议

二级封锁协议

一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。
二级封锁协议可以防止丢失修改和读“脏”数据。
在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。

使用封锁机制解决读“脏”数据问题

在这里插入图片描述

不读“脏”数据
事务T1在对C进行修改之前,先对C加X锁,修改其值后写回磁盘
T2请求在C上加S锁,因T1已在C上加了X锁,T2只能等待
T1因某种原因被撤销,C恢复为原值100
T1释放C上的X锁后T2获得C上的S锁,读C=100。避免了T2读“脏”数据

三级封锁协议

三级封锁协议

一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
三级封锁协议可防止丢失修改、读脏数据和不可重复读。

使用封锁机制解决不可重复读问题

在这里插入图片描述

可重复读
事务T1在读A,B之前,先对A,B加S锁
其他事务只能再对A,B加S锁,而不能加X锁,即其他事务只能读A,B,而不能修改
当T2为修改B而申请对B的X锁时被拒绝只能等待T1释放B上的锁
T1为验算再读A,B,这时读出的B仍是100,求和结果仍为150,即可重复读
T1结束才释放A,B上的S锁。T2才获得对B的X锁

封锁协议小结

三级协议的主要区别

什么操作需要申请封锁以及何时释放锁(即持锁时间)

不同的封锁协议使事务达到的一致性级别不同

封锁协议级别越高,一致性程度越高
在这里插入图片描述
欢迎大家加我微信交流讨论(请备注csdn上添加)
在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程子的小段

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值