首页 > 数据库 >T-SQL——关于表提示:WITH(NOLOCK)

T-SQL——关于表提示:WITH(NOLOCK)

时间:2024-10-08 17:00:24浏览次数:11  
标签:事务 提示 视图 查询 SQL table NOLOCK

目录

1.关于With(NOLOCK)

NOLOCK等价于:READUNCOMMITTED,即允许脏读。不发出共享锁来防止其他事务修改当前事务读取的数据,并且其他事务设置的排他锁不会阻止当前事务读取锁定的数据

用法:

SELECT * FROM TABLE WIHT(NOLOCK)

SELECT * FROM TABLE_A AS a WIHT(NOLOCK) LEFT JOIN TABLE_B AS b WIHT(NOLOCK) ON a.ID=b.ID

2.关于在视图上使用WITH(NOLOCK)

  • SELECT * FROM V_XXX WIHT(NOLOCK)

简而言之:查询视图的时候,使用WITH(NOLOCK),可以将该效果传递到视图中使用的表上面

In SQL Server 2005, all lock hints are propagated to all the tables and views that are referenced in a view. Also, SQL Server performs the corresponding lock consistency checks.
在 SQL Server 2005 中,所有锁提示都传播到视图中引用的所有表和视图。此外,SQL Server 还会执行相应的锁一致性检查。

但是需要注意:

If a table contains computed columns and the computed columns are computed by expressions or functions accessing columns in other tables, the table hints are not used on those tables. This means the table hints are not propagated. For example, a NOLOCK table hint is specified on a table in the query. This table has computed columns that are computed by a combination of expressions and functions that access columns in another table. The tables referenced by the expressions and functions do not use the NOLOCK table hint when accessed.
如果表包含计算列,并且计算列是通过访问其他表中的列的表达式或函数计算的,则不会在这些表上使用表提示。这意味着不会传播表提示。例如,在查询中的表上指定了 NOLOCK 表提示。此表具有计算列,这些列由表达式和函数的组合计算,这些表达式和函数访问另一个表中的列。表达式和函数引用的表在访问时不使用 NOLOCK 表提示。

3.关于WITH(NOLOCK)与WITH(READPAST)区分

  • READPAST:指定数据库引擎不读取被其他事务锁定的行

1.创建一个测试表

CREATE TABLE [dbo].[ATestLock]
(
    [Id] [BIGINT] PRIMARY KEY IDENTITY(1, 1) NOT NULL,
    [Msg] [NVARCHAR](50) NOT NULL,
    [CreateTime] [DATETIME] NOT NULL DEFAULT (GETDATE())
);

2.SSMS中打开一个会话,执行一个事务,不回滚不提交

BEGIN TRANSACTION;
INSERT INTO dbo.ATestLock(Msg)VALUES(N'Test');

--ROLLBACK TRANSACTION

3.SSMS中打开一个新的会话,执行下面语句

  • 不加任何的表提示语句,则查询不到被锁定的行
SELECT * FROM  dbo.ATestLock
--查询不到上面事务中插入的数据
  • 使用WITH(NOLOCK),则查询到了被锁定的行
SELECT * FROM dbo.ATestLock WITH(NOLOCK);
--查询到了上面事务插入的数据

Id      Msg           CreateTime
------- ------------- -----------------------
1       Test          2024-09-27 11:04:05.603
  • 使用WITH(READPAST),则查询不到被锁定的行
SELECT * FROM dbo.ATestLock WITH(READPAST);
--查询不到上面事务插入的数据

【BY THE WAY】:

  • SQL SQL Identity的自增在事务回滚后仍然递增,上面的事务,最后执行了ROLLBACK,之后在插入数据可以发现自增ID是跳过了被回滚的记录ID。

回滚了事务,自增标识的值仍会继续递增,这是因为自增标识的递增是由DBMS中的内部机制负责的,而非由事务控制。

4.关于WITH(NOLOCK)产生架构锁

WITH(NOLOCK)会不会产生锁?

很多人误以为使用了WITH(NOLOCK)后,数据库库不会产生任何锁。实质上,使用了WITH(NOLOCK)后,数据库依然对该表对象生成Sch-S(架构稳定性)锁以及DB类型的共享锁。

简单的说:就是其他事务在修改表结构的时候,我们的查询使用WITH(NOLOCK)依旧会被其他事务阻塞

5.参考

标签:事务,提示,视图,查询,SQL,table,NOLOCK
From: https://www.cnblogs.com/shanzhiming/p/18451354

相关文章

  • MySQL数据库备份与恢复
    MySQL数据库的备份与恢复是数据库管理中至关重要的一部分。无论是在Windows还是Linux系统上,掌握这些技能都能有效保护数据,防止数据丢失。本文将详细介绍MySQL数据库的备份与恢复方法,包括常用工具和步骤。一、备份MySQL数据库1.使用 mysqldump 工具mysqldump是......
  • linux中mysql5.7安装
    系统要求:CentOS7.664位卸载系统自带mariadb-lib1、rpm-qa|grepmariadb2、rpm-emariadb-libs-5.5.68-1.el7.x86_64 --nodeps 解压tar包:tar-xvfmysql*.tar以下加粗rpm包需要安装:mysql-community-common-5.7.23-1.el7.x86_64.rpmmysql-community-libs-co......
  • NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比
    NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比随着生成式人工智能(ArtificialIntelligenceGeneratedContent,简写为AIGC)时代的到来,使用大规模预训练语言模型(LLM)来进行text2sql任务的sql生成也越来越常见。基于LLM的text2SQL方法通常分为两种:基于pr......
  • MySQL与RESTfulAPI
    MySQL与RESTfulAPI 2024-01-2566阅读7分钟 1.背景介绍MySQL与RESTfulAPI是一个非常重要的技术主题,它们在现代互联网应用中扮演着关键角色。在这篇文章中,我们将深入探讨这两个技术的核心概念、算法原理、最佳实践以及实际应用场景。1.背景介绍MySQL是一种流行的关......
  • Pyqt5+SQLite
    通常在做业务逻辑时会遇到,如何在界面上对数据库信息进行操作的问题。这里我们选用SQLite,它是一种嵌入式数据库,以单个独立的文件形式存储数据,适用于Pyqt5的开发。下面做一个小案例,将数据库信息显示在界面中。1.创建数据库代码案例如下(创建一个用户信息表):conn=sqlite3.con......
  • SparkSQL与Hive查询不一致问题
    文章目录1.Hive版本2.问题背景3.问题现象4.原因分析1).分析原因可能是缓存2).发现文件存储特点3).子文件夹出现原因5.解决方式1).方法1修改配置2).方法2修改脚本6.总结1.Hive版本Hive1.2.1000.2.6.5.0-2922.问题背景交付项目上基本所有的脚本任务,都是使用h......
  • 揭秘SQL执行顺序:从混乱到有序的数据之旅
    在数据分析的世界里,SQL(StructuredQueryLanguage)是我们与数据库对话的语言。无论你是在处理销售数据、用户行为分析,还是进行复杂的数据挖掘,理解SQL的执行顺序无疑是提升查询效率和准确性的关键。今天,我们就来揭开SQL执行顺序的神秘面纱,带你从混乱到有序,开启一段数据之旅。1.......
  • PTA 作业一 两分钟学会JAVA语言 7-4 Java程序设计-基本程序-计算两点之间的距离 提示
    7-4Java程序设计-基本程序-计算两点之间的距离分数10全屏浏览切换布局作者 万静单位 北京化工大学这是一个编程题模板。编写程序,提示用户输入两个点(x1,y1)和(x2,y2),然后显示两点间的距离。计算两点之间距离的公式是:注意可以使用Math.pow(a,0,5)计算。输入格式......
  • sqli-labs通关全详解
    前言我们下面进行第一个漏洞——SQL注入的学习,SQL注入是十大漏洞之一,较为常见,算是Web安全入门必学漏洞。我们之前一直都以CTFHub为主线进行学习,但由于SQL注入细节较多,CTFHub的题目并不能深入学习。为探讨清楚SQL注入的诸多细节,我们特以经典的sqli-labs为支线进行从入门到进阶......
  • Mysql高级篇(下)——主从复制
    主从复制一、概述二、作用......