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

    UPDLOCK.UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。当我们用UPDLOCK来读取记录时可以对取到的记录加上更新锁,从而加上锁的记录在其它的线程中是不能更改的只能等本线程的事务结束后才能更改,我如下示例:BEGIN TRANSACTION --开始一个事务SELECT Qty FROM myTable WITH (UPDLOCK) WHERE Id in (1,2,3)

    我做了一个测试:
    在一个查询里写
    begin tran
    select * from address WITH (UPDLOCK) where [Name]='Z'
    waitfor delay '00:00:10'
    update address set [Name]='ZZ'
    commit tran

    在另一个查询里:
    如果同样要加更新锁,则会阻塞当前查询,直到其它连接释放更新锁.
    如果不加更新锁则直接可以读取更新锁的记录.


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

    Update XXX set XXX where 这种写法大家肯定都知道,才发现update和delete居然支持inner join的update方式,太神奇了。分享段示例代码:

    1update tb_User
    2set pass=''
    3from tb_User usr
    4inner join tb_Address addr on usr.nAddressFK = addr.nAddressID
    5where usr.id=123

    update的格式是

    update t1 set t1.name=’Liu’ from t1 inner join t2 on t1.id = t2.tid

    delete 语句也是类似

    delete from t1 from t1 inner join t2 on t1.id = t2.tid

    注意蓝色部分。

  • 相关阅读:
    Table Scan, Index Scan, Index Seek
    Ndo v3.1发布了!
    手动建立强类型DataSet
    <.NET分布式应用程序开发>读书笔记 第十章:Q&A
    HQL语法大全
    IT人才最容易犯的几个错误
    在线查询Windows API
    ODP.NET和System.Data.OracleClient的一些不同
    给PDF文件添加链接和书签
    cegui0.6.0的下载、安装、配置及samples浏览
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1933745.html
Copyright © 2011-2022 走看看