zoukankan      html  css  js  c++  java
  • SqlServer中的更新锁(UPDLOCK)

    原文地址:http://www.cnblogs.com/colder/archive/2013/01/24/2874456.html

    UPDLOCK.UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。

    当我们用UPDLOCK来读取记录时可以对取到的记录加上更新锁,从而加上锁的记录在其它的线程中是不能更改的只能等本线程的事务结束后才能更改.

    示例:

    测试:

    在另一个查询里:

    BEGIN TRANSACTION
    
    SELECT * FROM myTable WITH (UPDLOCK) WHERE Id in (1,2,3)
    
    waitfor delay '00:00:10' 
    
    
    update myTable set [Name]='ZZ' where Id in (1,2,3)
    commit TRANSACTION

    在另一个查询里:

    SELECT * FROM myTable WHERE Id in (1,2,3)

    可以马上查询到数据。

    但如果要更新数据,必须等其他更新锁释放后才能执行。

    update myTable set [Name]='ZZ' where Id in (1,2,3)


    这就说明,有时候需要控制某条记录在我读取后就不许再进行更新,那么我就可以将所有要处理当前记录的查询都加上更新锁,以防止查询后被其它事务修改.将事务的影响降低到最小

    同事有这个疑问:在什么情况下会要求“读取后不许更新”

    比如:该事物内读取数据后在更新操作,此时事物并未提交,如果另外有其他线程更改了这条数据,这时事务内的更新将有可能会覆盖更新的操作

  • 相关阅读:
    二维数组
    快速排序
    冒泡排序2
    对char类型数组的英文字母进行冒泡排序
    对char类型的数组进行冒泡排序
    冒泡排序
    对数组随机赋值,并输出(Arrays.toString(arr))
    数组声明的几种方式以及length属性
    猜拳游戏二
    二维小波包重构wprec2wprcoef
  • 原文地址:https://www.cnblogs.com/niaowo/p/3682573.html
Copyright © 2011-2022 走看看