首页 理论教育数据库应用实现并发控制

数据库应用实现并发控制

【摘要】:事务通过向封锁管理程序的系统组成部分发出请求而对记录加锁。这时其他事务就不能读取和修改订票数,直到甲事务修改完成并将数据写回到数据库,并解除对此数据的封锁之后其他事务才能使用这些数据。加锁是实现并发控制的一个非常重要的技术。表7—1锁的相容矩阵在表7-1的加锁类型相容矩阵中,最左边一列表示事务T1已经获得的数据对象上的锁的类型,最上面一行表示另一个事务T2对同一数据对象发出的加锁请求。

数据库环境中,进行并发控制的主要方式是使用封锁机制,即加锁(Locking),加锁是一种并行控制技术,是用来调整对共享目标(如数据库中共享记录)的并行存取的技术。事务通过向封锁管理程序的系统组成部分发出请求而对记录加锁。

以飞机订票系统为例,若甲事务要修改订票数时,在读出订票数前先封锁此数据,然后再对数据进行读取和修改操作。这时其他事务就不能读取和修改订票数,直到甲事务修改完成并将数据写回到数据库,并解除对此数据的封锁之后其他事务才能使用这些数据。加锁就是限制事务内和事务外对数据的操作。加锁是实现并发控制的一个非常重要的技术。所谓加锁就是事务丁在对某个数据操作之前,先向系统发出请求,封锁其所要使用的数据。加锁后事务丁对其要操作的数据具有了一定的控制权,在事务丁释放它的锁之前,其他事务不能操作这些数据。

具体的控制由锁的类型决定。锁的基本类型有两种:排它锁(Exclusive Lock,也称为X锁或“写”锁)和共享锁(Share Lock,也称S锁或“读”锁)。

·共享锁:若事务T给数据对象A加了S锁,则事务T可以读A,但不能修改A,其他事务可以再给A加S锁,但不能加X锁,直到T释放了A上的S锁为止。即对于读操作(检索)来说,可以有多个事务同时获得共享锁,但阻止其他事务对已获得共享锁的数据进行排它封锁。

共享锁的操作基于这样的事实:检索操作(SELECT)并不破坏数据的完整性,而修改操作(ⅢSERT、DELETE、UPDATE)才会破坏数据的完整性。加锁的真正目的是防止更新带来的失控操作破坏数据的一致性,而对检索操作则可放心地并行进行。

·排它锁:若事务丁给数据对象A加了X锁,则允许丁读取和修改A,但不允许其他事务再给A加任何类型的锁和进行任何操作。即一旦一个事务获得了对某一数据的排它锁,则任何其他事务均不能对该数据进行任何封锁,其他事务只能进入等待状态,直到第一个事务释放了对该数据的封锁。(www.chuimin.cn)

排它锁和共享锁的控制方式可以用表7-1所示的相容矩阵来表示。

表7—1 锁的相容矩阵

在表7-1的加锁类型相容矩阵中,最左边一列表示事务T1已经获得的数据对象上的锁的类型,最上面一行表示另一个事务T2对同一数据对象发出的加锁请求。T2的加锁请求能否被满足在矩阵中分别用“是”和“否”表示,“是”表示事务T2的加锁请求与T1已有的锁兼容,加锁请求可以满足;“否”表示事务T2的加锁请求与T1已有的锁冲突,加锁请求不能满足。