两段锁协议
一个事务中一旦开始释放锁,就不能再申请新锁了。事务的加锁和解锁严格分为两个阶段,第一阶段加锁,第二阶段解锁。
目的 :”引入2PL是为了保证事务的隔离性,保证并发调度的准确性,多个事务在并发的情况下依然是串行的。
封锁定理:
如果事务是良构的且是两阶段的,那么任何一个合法的调度都是隔离的。
2PL和2PC
**2PL,两阶段加锁协议:主要用于单机事务中的一致性与隔离性。**主要是在MySql(仅限innodb)中使用的。
2PC,两阶段提交协议,用于分布式事务。
S2PL(Strict 2 PL)
SQL是千变万化、条数不定的,数据库很难在事务中判定什么是加锁阶段,什么是解锁阶段。因此规定:
- 在事务中只有提交(commit)或者回滚(rollback)时才是解锁阶段,
- 其余时间为加锁阶段。
两阶段加锁对数据库性能的影响详见该文章(很好的文章,仔细看看):https://blog.csdn.net/qq4165498/article/details/7