封锁
Last updated
Last updated
并发控制避免由于并发操作引起的三类问题,即保障事务的隔离型。
并发控制的主要方法:封锁机制
封锁是实现并发控制的一个非常重要的技术,是指事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T可以操作该对象,在事务T释放它的锁之前,其他的事务不能更新该数据对象。封锁一般由DBMS自动执行。
封锁类型:排他锁(X)和共享锁(S)
X锁:排他锁或者写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务对A的任何封锁请求都不能成功。
S锁:共享锁或者读锁。若事务T对数据对象A加上S锁,则T可以读A,但不可以修改A,其他事务可以对A加S锁,而不可以加X锁。
封锁协议:对数据对象加锁时,还需约定一些规则。对封锁方式规定不同的规则,形成不同的封锁协议。
一级封锁协议:事务T在修改数据R之前,必须先对其加X锁,直到事务结束才释放。一级封锁协议可以防止丢失修改。如果只是读数据,不需要加锁,不能保证可重复读,不读脏数据。
二级封锁协议:一级封锁协议的基础上,事务T在读取数据R之前,必须先对其加上S锁,读完后即可释放S锁,可以防止读脏数据。不能保证可重复读。
三级封锁协议:一级封锁协议的基础上,事务T在读取数据R之前,必须先对其加S锁,直到事务结束才释放。三级封锁协议可以更进一步防止读-写依赖。