以下针对sql Server的sql查询之间有什么区别?

以下针对sql Server的sql查询之间有什么区别?,sql,sql-server,Sql,Sql Server,可能重复: 这些sql查询之间有什么区别 SQL查询: SELECT U.ID_USER AS ID, U.USERNAME AS NICK, U.PASSWORD AS PASS FROM T_USERS AS U WITH (NOLOCK) SELECT U.ID_USER AS ID, U.USERNAME AS NICK, U.PASSWORD AS PASS FROM T_USERS AS U SQL查询: SELECT U.ID_USER AS ID, U.USERNA

可能重复:

这些sql查询之间有什么区别

  • SQL查询:

    SELECT 
    U.ID_USER AS ID,
    U.USERNAME AS NICK,
    U.PASSWORD AS PASS
    FROM T_USERS AS U WITH (NOLOCK)
    
    SELECT 
    U.ID_USER AS ID,
    U.USERNAME AS NICK,
    U.PASSWORD AS PASS
    FROM T_USERS AS U
    
  • SQL查询:

    SELECT 
    U.ID_USER AS ID,
    U.USERNAME AS NICK,
    U.PASSWORD AS PASS
    FROM T_USERS AS U WITH (NOLOCK)
    
    SELECT 
    U.ID_USER AS ID,
    U.USERNAME AS NICK,
    U.PASSWORD AS PASS
    FROM T_USERS AS U
    
  • 第一个(使用nolock的查询)不会被阻止,即使它正在读取的数据被独占锁定,并且可能返回尚未提交的行。如果读取未提交的数据不是问题,那么NOLOCK通常用于减少阻塞。Nolock指定在读取数据时,不要试图锁定表、行、页等资源


    如果任何行正在进行修改或以独占方式锁定,则第二行(不带nolock的查询)将被阻止。它将永远不会读取尚未提交的数据,因为它将被更改数据的进程阻止。这是通常情况下,当你不想读取未被引用的数据时,准确度是最重要的。

    简短的回答:前者试图避免锁定行,因此可以读取正在更新的数据。长回答:谷歌“数据库锁定”和阅读;这是论文的主题。什么时候可以锁定?当我使用带有“NO LOCK”的查询时?NO LOCK意味着它不会被任何其他进程阻止,因为该进程不会尝试获取任何锁(正如您指定的nolock)。默认情况下,进程通常对表、页或行等资源使用共享锁。