• SET Transaction ISOlation Level Read xxx 语法的四种情况


    SETTransactionIsolationLevelRead语法的四种情况_风雨中前行_新浪博客 (sina.com.cn)

    SqlServer之锁Lock - ProZkb - 博客园 (cnblogs.com)

    SET Transaction Isolation Level Read UNCOMMITTED

    使用这句可以分为四种情况,现在就在这里逐一介绍

    第一种情况: 

    READ COMMITTED
    这句的作用是:
    指定在读取数据时控制共享锁以避免脏读,但数据可在事务结束前更改,
    从而产生不可重复读取或幻像数据。该选项是SQLServer的默认值。 

    第二种情况: 

    READ UNCOMMITTED
    这句的作用是:
    执行脏读或0级隔离锁定,这表示不发出共享锁,也不接受排它锁。
    当设置该选项时,可以对数据执行未提交读或脏读;在事务结束前可以更改数据内的数值,行也可以出现在数据集中或从数据集消失。
    该选项的作用与在事务内所有语句中的所有表上设置 NOLOCK 相同。
    这是四个隔离级别中限制最小的级别。 

    第三种情况 

    REPEATABLE  READ
    这句的作用是:
    锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,
    且幻像行包括在当前事务的后续读取中。
    因为并发低于默认隔离级别,所以应只在必要时才使用该选项。 

    第四种情况: 

    SERIALIZABLE
    这句的作用是:
      在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。
     这是四个隔离级别中限制最大的级别。因为并发级别较低,所以应只在必要时才使用该选项。
     该选项的作用与在事务内所有SELECT语句中的所有表上设置HOLDLOCK相同(HoldLock 只读锁)。 

    ROWLOCK的使用

    1、ROWLOCK行级锁确保,在用户取得被更新的行,到该行进行更新,这段时间内不被其它用户所修改。
    因而行级锁即可保证数据的一致性,又能提高数据操作的并发性。
    
    2、ROWLOCK告诉SQL Server只使用行级锁,
       ROWLOCK语法可以使用在SELECT,UPDATE和DELETE语句中

    例如select语句中

    A 连接中执行
    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
    begin tran
      select * from tablename with (rowlock,UpdLock) where id=3
      waitfor delay '00:00:05'
    commit tran
    
    B连接中如果执行
    select * from tablename with (rowlock, updlock) where id=3 --则要等待5秒 C连接中如果执行 update tablename set colname='10' where id <>3 --可立即执行 D连接中如果执行 update tablename set colname='10' where id=3 --则要等待5秒

    SQL Server中使用ROWLOCK需要注意的地方

    1、如果你错误地使用在过多行上,数据库并不会聪明到自动将行级锁升级到页面锁,
       服务器也会因为行级锁的开销而消耗大量的内存和CPU,直至无法响应。
    
    2select 语句中,RowLock在不使用组合的情况下是没有意义的,With(RowLock,UpdLock) 这样的组合才成立,
       查询出来的数据使用RowLock来锁定,当数据被Update的时候,锁将被释放
  • 相关阅读:
    [BetterExplained]书写是为了更好的思考
    java 连接 mysql 数据库 ..password [yes]问题
    学习密度与专注力
    抠鼻屎的方法
    张飞流水账(摘)
    用 C 语言 连接 mysql (问题已解决)
    编程的首要原则(s)是什么?
    Tomat源码学习(二)(转载)
    [BetterExplained]为什么你应该(从现在开始就)写博客
    事件 代理 练习
  • 原文地址:https://www.cnblogs.com/ZkbFighting/p/16029028.html
Copyright © 2020-2023  润新知