1、三级封锁协议
不可重复读(不可重复读会导致什么问题)
大家好!今天让创意岭的小编来大家介绍下关于不可重复读的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。
开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等
只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端
创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008
本文目录:
一、三级封锁协议
锁的类型:
基本的封锁类型有两种: 排它锁(X锁) 和 共享锁(S锁)
X锁,是事务T对数据A加上X锁时,只允许事务T读取和修改数据A
S锁,是事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,直到T释放A上的S锁。
若事务T对数据对象A加了S锁,则T就可以对A进行读取,但不能进行更新(S锁因此又称为读锁)。在T释放A上的S锁以前,其他事务可以再对A加S锁,但不能加X锁,从而可以读取A,但不能更新A。
更多锁的类型和隔离级别参考 SQL 隔离级别
丢失更新(一类丢失更新)
撤销一个事务时,把其他事务已提交的更新数据覆盖
脏读
一个事务读到另一个事务未提交的更新数据
不可重复读
一个事务读到另一个事务已提交的更新数据
覆盖更新(二类丢失更新)
这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据
虚读(幻读)
一个事务读到另一个事务已提交的新插入的数据
在运用X锁和S锁对数据对象加锁时,还需要约定一些规则。例如何时申请X锁或S锁、持锁时间、何时释放等。称这些规则为封锁协议(Locking Protocol)
一级封锁协议(对应read uncommited)
事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放,事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。
一级封锁协议可以 防止丢失修改 ,并保证事务T是可恢复的。使用一级封锁协议可以解决丢失修改问题。
在一级封锁协议中,如果 仅仅是读数据不对其进行修改,是不需要加锁的 ,它 不能保证可重复读和不读“脏”数据 。
二级封锁协议(对应read commited)
在一级封锁协议之上,事务T在读取数据R之前必须先对其加S锁,读完后方可释放S锁。
二级封锁协议除防止了丢失修改,还可以 进一步防止读“脏”数据 。
但在二级封锁协议中,由于读完数据后即可释放S锁,所以它 不能保证可重复读 。
三级封锁协议(对应reapetable read)
在一级封锁协议之上,事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放S锁。
三级封锁协议除防止了丢失修改和不读“脏”数据外,还 进一步防止了不可重复读 。
四级封锁协议(对应serialization)
四级封锁协议是对三级封锁协议的增强,其实现机制也最为简单,直接对事务中所读取或者更改的数据所在的表 加表锁 ,也就是说,其他事务不能读写该表中的任何数据。这样五类并发问题都得以避免!
二、
三、
四、
以上就是关于不可重复读相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。
推荐阅读:
snapchat不可以看剩余电量吗(snapchat在哪看照片)