【数据库管理】十分钟了解啥是三级封锁协议、X锁和S锁

文章讲述了在多用户共享系统中,为保证数据库完整性,采用锁和封锁协议来控制并发操作。排他锁(X锁)禁止其他事务修改数据,共享锁(S锁)允许读取但禁止修改。一级封锁协议防止更新丢失,二级封锁协议进一步防止读取脏数据,而三级封锁协议则可解决不可重复读问题。
摘要由CSDN通过智能技术生成

一.为什么要用锁

        在多用户共享系统中,许多事务可能同时对同一数据进行操作,称为“并发操作”,此时数据库管理系统的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,同时避免用户得到不正确的数据。

        如果并发不受控制,则数据库的多个事务并发操作(不加任何锁)会引发一系列数据不一致的问题,突出的问题有以下几个:

  • 多个事务同时处理同一个事务,导致数据更新丢失问题:

        事务T取到数据A后进行数据处理,期间事务Y也取了数据A进行处理,导致事务T的结果被事务Y的结果覆盖。

  • 多个事务同时处理同一个事务,导致数据出现不可重复读取问题:

 

        事务T读取数据A后,事务Y也读取了数据A,并且进行了数据处理和更新,这时事务T 有点不放心所以重新校验了数据A,再次确保数据没问题,这时候发现数据A已经被修改了,出现前后数据不对等,同一个数据不可重复读取的问题。

  • 多个事务同时处理同一个事务,导致数据出现读取脏数据问题:

        事务Y在进行数据处理并且更新了数据A,事务T在期间读取了一下数据A,但是后面事务Y突然后悔了,连夜将数据A恢复会原值,这就导致了事务T拿到的数据是事务Y的一个过程数据,是个脏的不干净的数据。

二.有哪些锁

         为了有效抑制以上的问题,现在规定多个事务并发时不能随随便便就对数据进行处理(不能一过来直接拿着数据就走),要针对数据的读取和修改,增加两把锁(我们称之为排他锁和共享锁),用于给数据上锁,当事务要用到数据时,就给数据加上锁,提醒别的事务有人占用这个数据了!

  • 排他锁(也叫X锁)

        作用是禁止并发操作

        当事务T对数据A加上排他锁后,其他事务要等事务T解除X封锁后,才能对数据A进行重新上锁,保证了其他事务在事务T释放A上的锁之前,不能对数据A进行任何操作,这里需要注意的是,加上排他锁不是直接限制读和写,而是限制上锁

  • 共享锁(也叫S锁)

        作用是允许其他事务查询但不允许修改
        当事务T对数据A加上共享锁后,其他事务只能对A加共享锁,而不能加排他锁,直到事务T释放数据A上的共享锁,这里值得注意的是,加上共享锁不是直接限制写,是限制其他事务上排他锁

三.什么是封锁协议

        有了这两把锁之后,新的问题又出现了:

  1. 怎么知道什么情况下要用什么锁?
  2. 什么时候要用锁?什么时候不用?
  3. 上锁之后什么时候解锁最合适?
  4. ……

        而神奇的“三级封锁协议”,就是为了告诉你什么情况下用什么锁可以解决什么问题,只要事务们都按照协议的规则去做,就可以避免诸如更新丢失、读取脏数据或者不可重复读取数据等问题。

        至此,你应该明白一个潜在的含义:锁本身只限制其他事务对数据的加锁权限,而限制事务对数据的读写操作,是通过锁+封锁协议来实现的

四.一级封锁协议

        一级封锁协议的定义如下:事务T 在修改数据A之前必须先对其加上排他锁(不加锁直接修改数据是被禁止的,一定要加锁),直到事务结束才释放

        如果事务们都遵守一级协议的话,就可以避免更新丢失的问题:

         但一级封锁协议不能解决读取脏数据重复读取数据的问题,原因在于一级封锁协议中只规定了事务们在修改数据时才需要加上锁,而没有规定只读取不改数据时也要加上锁!所以一级封锁协议的漏洞就在于如果你只读不改的话是可以不用加锁的!并且也是可以直接读取成功的!这就导致一级封锁协议不能解决读取脏数据和重复读取数据的问题,因为其他事务可能在任何时间不加锁的情况下进行数据读取。

五.二级封锁协议

        二级封锁的定义是:在一级封锁协议的基础上,加上事务Y 在读取数据A之前先对其加共享锁,读完后即可释放共享锁

        如果事务们都遵守二级协议的话,就可以避免丢失数据修改(一级封锁协议带过来的),因为事务Y在读取期间加上了共享锁,导致其他事务在这期间都不能对数据进行修改,只能读取,从而防止了读“脏”数据(二级封锁协议的好处)。

        但二级封锁协议不能解决不可重复读取的问题,原因在于二级封锁协议在读取数据之后,立即释放S锁,之后其他事务仍有可能对数据进行修改,然后如果该事务又读取数据来进行核对的话,就有可能读到不一致的结果。 

六.三级封锁协议

        三级封锁的定义是:在一级封锁协议的基础上,加上事务Y 在读取数据A之前先对其加共享锁,知道整个事务全部完成后才释放共享锁

         三级封锁协议直到事务结束才释放,可以有效防止丢失修改、防止读“脏”数据与防止数据重复读。

七.总结

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

师兄师兄怎么办

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

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

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

打赏作者

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

抵扣说明:

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

余额充值