【问题标题】:SQL Server NOLOCK keywordSQL Server NOLOCK 关键字
【发布时间】:2010-01-21 06:27:41
【问题描述】:

当 SQL 客户端发出以下命令时:

select * into tbl2
FROM tbl1 (nolock)
WHERE DateCreated < '2009/01/01'

这是否意味着 该命令不会锁定 tbl1 或 它不会被对 tbl1 进行的其他未提交事务阻塞?

更新:

[NOLOCK]:指定允​​许脏读。不发布共享锁来防止其他事务修改当前事务读取的数据,其他事务设置的排他锁不会阻止当前事务读取锁定的数据。 参考:MSDN

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    意思是第一个;您没有取出任何锁和,因此是第二个;您不会被其他未结交易阻止。请参阅 table hints 上的 MSDN 文档。

    这是transaction isolation levels 上 MSDN 文档的链接 - 如果您正在考虑使用 NOLOCK,这可能会很有用。 NOLOCK 将 SQL 语句置于未提交的隔离级别。如果您有一个多语句事务,您可以将大部分事务的隔离级别设置为较低级别,并在需要时提高它,而不是仅在事务中的一个或多个语句上降低它。

    【讨论】:

      【解决方案2】:

      两者兼而有之。它还会从其他 [未提交的] 事务(如果有)中读取未提交的数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-28
        • 1970-01-01
        • 2012-04-25
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多