mysql中的两段锁协议和三级封锁协议
两段锁协议
⼀个事务中⼀旦开始释放锁,就不能再申请新锁了。事务的加锁和解锁严格分为两个阶段,第⼀阶段加锁,第⼆阶段解锁。⽬的 :”引⼊2PL是为了保证事务的隔离性,保证并发调度的准确性,多个事务在并发的情况下依然是串⾏的。
封锁定理:
如果事务是良构的且是两阶段的,那么任何⼀个合法的调度都是隔离的。
2PL和2PC
**2PL,两阶段加锁协议:主要⽤于单机事务中的⼀致性与隔离性。**主要是在MySql(仅限innodb)中使⽤的。
2PC,两阶段提交协议,⽤于分布式事务。
S2PL(Strict 2 PL)
SQL是千变万化、条数不定的,数据库很难在事务中判定什么是加锁阶段,什么是解锁阶段。因此规定:
jsp生成pdf文件1. 在事务中只有提交(commit)或者回滚(rollback)时才是解锁阶段,
2. 其余时间为加锁阶段。
两阶段加锁对数据库性能的影响详见该⽂章(很好的⽂章,仔细看看):
封锁协议:快速排序算法实例
运⽤X锁和S锁对数据对象进⾏加锁时约定的规则就是封锁协议。
⽬的是在不同程序上保证数据的⼀致性。
三级封锁协议
mysql怎么读英语1. ⼀级封锁:修改数据加x锁直到事务结束才释放。在此协议中,仅仅是读数据是不需要加锁的,所以只能解决丢失修改问题,不能解决
博客王冰冰脏读和不可重复读。
什么是常量元素和微量元素2. ⼆级封锁:在⼀级封锁的基础上,加了⼀条:T事务在读取数据R之前必须先对其加上S锁,读完释放S锁。可以解决丢失修改和脏读
(加了读锁就可以防⽌在读的期间其他事务进⾏修改,但是读完之后,事务结束之前,依然可能会其他事务进⾏修改,导致不可重复读)。
初级web开发工程师3. 三级封锁协议:⼀级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。:解决了丢失修改、脏读和不可
重复读的问题。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论