2PL学习记录

2PL学习记录

《区块链核心算法解析》中提及2PL,最早接触2PL应该是在大三数据库原理课上,但是已经忘记了,所以重新学习一下2PL。

事务可串行性(SERIALIZABLE)

说到2PL两阶段锁,就不得不提及事务可串行性

  • 在说事务可串行性之前,先讲讲为什么数据会出错,以及冲突操作的概念。
    1. 为什么会出错:
       那是因为多个事务访问数据库,比如A事务先读1资源,B事务后写1资源,如果出现问题先让B事务写了1资源,那么A事务就会读错了,这是并发调度产生的问题。
    2. 冲突操作的概念:
      冲突操作是指不同的事务对同一个数据的读写操作和写写操作,还有同一个事务的读写。
      Ri (x)与Wj(x) (事务Ti读x,Tj写x)
      Wi(x)与Wj(x) (事务Ti写x,Tj写x)
      Ri(x)与Wi(x) (事务Ti读x,Tj写x)
  • 事务可串行性是为了保证数据库在并发操作时,数据是正确,可以看串行调度的定义:一个调度中,属于一个事务的所有操作连续执行,称之为串行调度。
    简单来说,就是一次并发操作(多个事务操作数据库)得到的结果(事务执行到最后的结果(读或者写))与某一次串行调度的结果是一致的,就可以保证这次并发操作是正确的。

2PL(2阶段锁协议,two-phase locking protocol)

  • 2阶段锁协议,就是给要做的数据上锁,然后执行完所有操作后再解锁,解锁时就不能有任何操作了。所以是两阶段(上锁操作+解锁),来保证数据不出错。
  • 2PL内容很少,重点基本上是理解可串行性和冲突操作。

你可能感兴趣的:(2PL学习记录)