数据库—封锁技术

来源:互联网 发布:python jenkins api 编辑:程序博客网 时间:2024/06/07 21:18

一、封锁

什么是封锁:封锁是指事务在对某个数据对象操作之前,先向系统发出请求,对其加锁。加锁之后,事务就对该数据对象有了一定的控制,在事务释放锁之前,其他事务不能对此数据对象进行更新。封锁是实现并发控制的一个非常重要的技术。

二、基本的封锁类型

排它锁(Exclusive Locks,简记为X锁)又称为写锁;

共享锁(Share Locks,简记为S锁)又称为读锁;

排它锁:

若事务T对数据对象加上X锁,则只允许事务T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放锁。

共享锁:

若事务T 对数据对象A加上S锁,则事务T可以读A但不能修改A ,其它事务只能再对A 加S 锁,而不能加X锁,直到T释放A上的S锁

三、锁的相容矩阵


Y指相容的请求,N指不相容的请求,上图的意思是,比如事务T1给某对象加上了X锁,则事务T2不可以再给对象家X锁和S锁,但可以不加锁对数据进行操作;事务T1若给对象加了S锁,则事务T2不可以给对象加X锁,但可以给对象加S锁,也可以不加锁操作数据;事务T1若不给对象加锁,则事务T2可以给对象加X锁、S锁,也可以不加锁。

三、三级封锁协议

在运用X锁和S锁对数据对象加锁时,需要遵循封锁协议。各种不同的封锁协议,在不同程度上保证了并发操作的正确调度。

1.一级封锁协议

事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。(结束包括正常结束Commit和非正常结束Rollback)

事务并发可以带来三类问题:1.丢失更新;2.不可重复读;3.读“脏”数据

一级封锁协议可以防止丢失更新,但如果事务T1仅仅读数据,不进行修改,是不需要加锁的,所以一级封锁协议不可以防止不可重复读和读“脏”数据这两类并发问题。

2.二级封锁协议

一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。(此处的S锁为短锁,仅持续到读完数据)

二级封锁协议可以防止丢失修改和读“脏”数据,但由于读完数据后即可释放S锁,仍不可以防止不可重复读这一并发问题。

3.三级封锁协议

一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。(此处的S锁为长锁,持续到事务结束)

三级封锁协议可防止丢失修改、读脏数据和不可重复读。





阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 平度中心医院 平度市中心医院 青岛到平度货运 平度到青岛火车 青岛平度房屋出租 青岛平度男科医院 青岛平度星光华府 山东青岛平度邮编 青岛平度江山帝景 山东平度市聚集事件 平度市职业教育中心 青岛市平度市 平度市房价 平度市属于哪个市 平度市市长 青岛市平度医院 平度市人民法院 平度市属于哪里 平度市人民医院怎么样 平开窗户图片 平窗 断桥铝合金平开窗 平开窗和推拉窗哪个好 平开窗品牌 平开窗窗撑 平开窗传动器 什么是平开窗 平开窗纱窗 凤铝平开窗 铝合金平开窗 50平开窗 平开窗的做法 平开窗价格表 平开窗图片效果图 平开窗效果图 平开窗配件 平开窗厂家 断桥铝平开窗 平开窗批发 阳台平开窗 双层平开窗