【问题标题】:Using UPDLOCK without transaction在没有事务的情况下使用 UPDLOCK
【发布时间】:2018-02-09 00:26:15
【问题描述】:

文档指出Specifies that update locks are to be taken and held until the transaction completes. 因此,如果我不是交易,将其添加到我的查询中是否毫无意义?

【问题讨论】:

    标签: sql sql-server tsql transactions


    【解决方案1】:

    SQL Server 中的一切都是在事务中完成的。无论您是否使用关键字Begin Transaction 显式打开事务,如果您没有显式打开事务(A.K.A Explicit Transaction),sql server 会自动将您的 t-sql 语句包装在事务中,也称为Implicit Transactions

    现在在事务(显式或隐式)期间,sql server 将获取资源(表、索引等)上的一些锁,根据正在执行的操作类型,sql server 获取不同类型的锁(共享锁、独占锁)锁等)

    如果您在语句中使用 UPDLOCK(更新锁),它是一个排他锁,其他用户将无法在您的事务期间(显式或隐式)访问对象。

    因此,如果您在查询的语句中使用提示 (UPDLOCK),无论您是否使用事务(显式事务)或不使用(隐式事务),都将获得排他锁,并在事务期间将对象独占锁定给您。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 2012-09-13
    • 2018-08-21
    • 1970-01-01
    • 2019-08-19
    • 2016-08-20
    相关资源
    最近更新 更多