数据库的年代锁和X锁,两段锁协议

  
  基本的封锁类型有两种:排它锁(X锁)和共享锁(锁)。所谓X锁,是事务T对数据一个加X锁上时,只允许事务T读取和修改数据,…所谓的锁,是事务T对数据一个加上年代锁时,其他事务只能再对数据一个加锁,而不能加X锁,直到T释放一个上的锁。
  若事务T对数据对象一个加了锁,则T就可以对一个进行读取,但不能进行更新(S锁因此又称为读锁),在T释放一个上的年代锁以前,其他事务可以再对一个加锁,但不能加X锁,从而可以读取,但不能更新A . 

<强>两段锁协议:

数据库的两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁

1。扩展阶段

在对任何数据项的读,写之前,要申请并获得该数据项的封锁。

2。收缩阶段

每个事务中,所有的封锁请求必须先于解锁请求。

例如:事务T遵循两段锁协议,其封锁协议为:

开始事务;

锁(一个);阅读;答:=A + 100;写一篇;锁(B);解锁(一个);读(B),解锁(B),

提交,,,,,,

可以证明:若并发执行的所有事务均遵守两段锁协议,则对这些并行事务的任何并行调度策略都是可串行化

需要说明的是,并发执行的所有事务若均遵守两段锁协议,只是这些事务的并行调度策略能可串行化的充分条件,不是必要条件。

两段锁协议与防止死锁的一次封锁法的区别:

一次封锁法要求事务必须一次对所有要使用到的数据项进行加锁,否则不能继续运行。

显然,一次封锁法符合两段锁协议,但是两段锁协议并不要求一次就要对所有需要用到的数据项进行加锁,因此遵守两段锁协议的事务有可能死锁


数据库的年代锁和X锁,两段锁协议