zoukankan      html  css  js  c++  java
  • 数据库事务的学习02

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

    共享锁:
    若事务T对数据对象A加上了S锁,则事务T可以读A但不能修改A,其他事务只能对A加上S锁,而不能加入X锁。
    2、封锁类型的相容矩阵
    T1 \\\ T2 X S -
    X N N Y
    S N Y Y
    - Y Y Y
    Y=YES 相容的请求
    N=NO 不相容的请求

    X:排他锁
    S:共享所
    -:表示不加锁

    例子:
    T1对对象A加了X锁,那么T2对对象A的加X,S锁的请求被拒绝,不加锁的请求被允许
    注意:如果请求是 修改/读取对象A但是不对其加锁的请求,是被允许的,这样锁就没有意义了,所以要搭配封锁协议来使用
    如下面的书页P311中的例子c:
    事务T1在修改数据C,第二个时间点T2事务去查询数据C,书上说如果读的时候不加S锁会产生脏读。
    说明不加锁可以读到数据而不用等待。
    同理:不加锁的去请求修改也可以的。
    3、封锁协议
    一、一级封锁协议
    一级封锁协议是:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。
    一级封锁协议可以防止丢失修改,并保证事务T是可恢复的。使用一级封锁协议可以解决丢失修改问题。
    在一级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,它不能保证可重复读和不读“脏”数据。
    二、二级封锁协议
    二级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后方可释放S锁。
    二级封锁协议除防止了丢失修改,还可以进一步防止读“脏”数据。但在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。
    三、三级封锁协议
    三级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
    三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读
    上述三级协议的主要区别在于什么操作需要申请封锁,以及何时释放。

  • 相关阅读:
    特殊字符大全
    ASP執行文件下載
    在 Access 里使用查询建立 存储过程/视图, 并使用 ASP 执行
    通過windows的排定工作來執行存儲過程
    前台页面中用js取得eWebEditor的值
    IE7外觀優化
    电话订票
    在BIOS设置“扩展或板载”显卡的方法
    子窗口中操作父窗口对像(javascript)(转)
    mailto用法
  • 原文地址:https://www.cnblogs.com/dxwen/p/11197340.html
Copyright © 2011-2022 走看看