zoukankan      html  css  js  c++  java
  • SQL Server 之 事务隔离级别

    SET TRANSACTION ISOLATION LEVEL xxx  -- 每次设置只针对当前事务块

    xxx 取值:

    READ UNCOMMITTED

    READ COMMITTED

    REPEATABLE READ

    SNAPSHOT

    SERIALIZABLE

    test1表数据如下:

         

    现在对 Name 为 aaaaa 进行 update,并设置2分钟延时

     

    上面的 update 默认使用 rowlock的,所以对于该表是使用IX锁的(第12行),此时如果查询其它行,是不会被阻塞的,因为IX兼容IS。

     但如果 update 使用 tablock,则该表将使用X锁,有关该表查询都会被阻塞,因为X不兼容IS。

     

    设置事务隔离级别为 READ UNCOMMITTED,则允许脏读(注意此事务隔离级别设置只在当前有效

    等同如下设置,但nolock只针对当前select语句:

    此时如果如下使用,将会被阻塞:

      而这样可以避免无限时间的等待:  

    从下图可以查看,会话55阻塞了会话56

    最后,延时结束时,update 的数据被回滚,导致上面有结果的查询出现脏读,而被阻塞的查询将会获得如下数据:

  • 相关阅读:
    Yarn
    easyui
    eclipse-android
    js-小技能 そうですか
    sql server 时间处理
    上传文件
    时间 & 时间戳 之间 转换
    JDIC
    Spring 定时器
    映射
  • 原文地址:https://www.cnblogs.com/yipeng-yu/p/4299492.html
Copyright © 2011-2022 走看看