数据库两阶段锁的理解

在学习两阶段锁的时候,第一遍懵懵懂懂,勉强记了下来,等到第二遍复习的时候,发现全部忘掉了,所以决定要理解,要理解,要理解!!!

不能死记硬背,虽然对于应付考试可能有点帮助,但是长远来看,还是要理解!!!

本文重点讨论关于三种两段锁协议对于并发问题的解决。

两阶段锁有三个阶段:

两阶段锁协议、严格两阶段锁协议和强两阶段锁协议。

这三个阶段是不断增强的,目的是解决并发过程中出现的各种问题。

两阶段锁协议:指所有事务分两个阶段提出加锁和解锁申请

·增长阶段:对任何数据进行读写操作之前,首先申请并获得该数据的封锁。

·收缩阶段:在释放一个封锁后,事务不再申请和获得其他的任何封锁。

严格两阶段锁协议:

除了满足两阶段锁协议规定外,还要求事务的排它锁必须在事务提交之后释放。

强两阶段锁协议:

除了满足两阶段锁协议外,还要求所有锁都必须在事务提交之后释放。

关于三种两阶段锁的作用分析:

·两阶段锁:是保证冲突可串行化的充分条件。

举例:当一个调度中有连续的R1(A)W2(A)时,说明事务1已经UNLOCK A的锁了,(因为W2(A)需要申请排它锁,必须等事务1释放A的锁)并且不再申请其他锁,则事务1和2不会有冲突的动作,即冲突可串行化。

·严格两阶段锁:解决了级联回滚的问题;避免了脏读和丢失修改的问题。

级联回滚一般是由脏读引起的,所以解决脏读问题也就解决了级联回滚问题。

脏读是由于读了由其他事务更新得到的数据,而这个数据的更新还没有提交。

严格两阶段锁要求排它锁在事务提交后释放锁。而对于数据的更新要申请排它锁,对数据更新后提交事务再释放排它锁,这时其他事务才能申请锁来进行数据读取,而此时读取的数据就不再是脏数据。

解决丢失修改问题也是同理,在一个事务更新数据并提交后,其他事务才能申请锁进行更新提交,即前一个更新虽然被覆盖,但是并不是丢失。

·强阶段锁协议:进一步解决数据项不能重复读的问题。

这个一直想不通为什么 ,还请各位解答www

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值