什么是封锁?
封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁,加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。封锁是实现并发控制的一个非常重要的技术。一个事务对某个数据对象加锁后究竟拥有什么样的控制由封锁的类型决定。
基本封锁类型:
排它锁(Exclusive Locks,简记为X锁):又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。保证其他事务在T释放A上的锁之前不能再读取和修改A。
共享锁(Share Locks,简记为S锁):又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。保证其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
锁的相容矩阵
| T1
| X | S | _ |
| X | N | N | Y |
| S | N | Y | Y |
| _ | Y | Y | Y |
Y=Yes,相容的请求
N=No,不相容的请求
在锁的相容矩阵中:最左边一列表示事务T1已经获得的数据对象上的锁的类型,其中横线表示没有加锁;最上面一行表示另一事务T2对同一数据对象发出的封锁请求。T2的封锁请求能否被满足用矩阵中的Y和N表示。Y表示事务T2的封锁要求与T1已持有的锁相容,封锁请求可以满足。N表示T2的封锁请求与T1已持有的锁冲突,T2的请求被拒绝