|
为了解决并发控制问题,在关系数据库系统中,引入了两段封锁协议。封锁是指给定事务T1在对某个数据对象D1进行操作之前,先向数据库系统发出请求,并对D1加锁;成功加锁之后,该事务T1就得到对此数据对象D1的控制权;在T1释放该锁之前,其他事务(如T2,T3等)无法更新数据对象D1。关系数据库系统通常提供多种类型的封锁。事务对数据对象加锁后拥有何种控制权是由封锁的类型决定的。封锁的基本类型有以下两种: 1.X锁:排他锁,事务T1对数据对象D1加了X锁之后,只要未释放该锁,其他事务不能对数据对象D1另加任何类型的锁。 2.S锁:共享锁,事务T1对数据对象D1加了S锁之后,虽然未释放S锁,其他事务也可以对D1加S锁,但不能加X锁。 在关系数据库中,两段锁协议是指事务必须分成两个阶段对数据对象进行控制: 1.加锁阶段:在该阶段可以进行加锁操作。在对任何数据进行读操作之前要申请并获得S锁,而在进行写操作之前要申请并获得X锁。如果加锁不成功,则事务进入等待状态,直到加锁成功才继续执行。 2.解锁阶段:当事务释放了一个封锁以后,事务进入解锁阶段,在该阶段只能进行解锁操作不能再进行加锁操作。 通常,在关系数据库中,两段封锁协议的实现方法如下:事务开始后就处于加锁阶段,一直到执行ROLLBACK和COMMIT之前都是加锁阶段。ROLLBACK和COMMIT使事务进入解锁阶段,即在ROLLBACK和COMMIT模块中DBMS释放所有封锁。 【出处】朝乐门.数据科学,清华大学出版社,2016年8月第1版.
|