gpt4 book ai didi

sql - with(nolock) 、 (nolock) 、 nolock 区别?

转载 作者:行者123 更新时间:2023-12-02 22:19:53 26 4
gpt4 key购买 nike

我知道 with(nolock)(nolock) 相同或几乎相同。 REF:with(nolock) or (nolock) - Is there a difference?

但是nolock怎么样?您可以在 select 中使用它们中的任何一个,我看到的唯一显着区别是使用您可以编写的别名时:

使用(nolock)从table1中选择*作为mytable

从 table1 中选择 * 作为 mytable (nolock)

但你不能写:

从 table1 选择 * 作为 mytable nolock

PS:我不是在这里讨论 nolock 是好是坏:)

最佳答案

区别在于您应该使用语法 WITH (NOLOCK) (或WITH (<any table hint>))。为什么?

  1. 没有WITH已弃用。来自 Table Hints on MSDN :

    Omitting the WITH keyword is a deprecated feature: This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

  2. from table1 nolock根本不应用提示 - 这是一个别名。例如:

    SELECT nolock.name FROM sys.objects nolock ORDER BY nolock.name;

    请注意,我可以使用 nolock作为别名。这里没有应用任何提示。

  3. from table1 as mytable nolock在现代版本的 SQL Server 中是无效语法。

    Msg 1018, Level 15, State 1, Line 12
    Incorrect syntax near 'nolock'. If this is intended as a part of a table hint, A WITH keyword and parenthesis are now required. See SQL Server Books Online for proper syntax.

您还应该考虑使用 session 级提示 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ,因为这样你就没有上面的语法问题,而且你也没有 15 WITH (NOLOCK)乱扔你的查询。这些使得以后更难替换为不同的隔离级别(例如 RCSI,它比 READ UNCOMMITTED 恕我直言)实用得多,而单个批处理级语句是一种非常容易替换的单行语句。

另外,这对于其他读者来说比对于OP来说更重要,请绝对确定您了解使用NOLOCK的风险。 ,其中包括在单行中获取从未存在过的损坏数据:

关于sql - with(nolock) 、 (nolock) 、 nolock 区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21119880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com