介绍

  NOLOCK从字面意思可以看出就是没有锁,表示这段sql不去考虑目前table的transaction lock,就是说加上NOLOCK后不受锁的限制读取数据,包括已修改未提交的数据,概念上类似于读未提交READ UNCOMMITED隔离级别,

针对于SELECT语句。

  

  优点:

    • 提升查询性能

  缺点:

    • 脏读

  

示例:

  首先创建一个测试表,如下:

  前面说了NOLOCK会读取未提交数据,那就创造未提交的情况进行测试,

  先插入一条记录,数据插入后未提交或者未回滚

BEGIN TRAN
INSERT INTO dbo.TestA
(
Name,
Phone
)
VALUES
(
'cc', -- Name - varchar(50)
'3333' -- Phone - varchar(50)
)
--COMMIT
--ROLLBACK

  

  此时如果使用不加NOLOCK的语句查询,会出现阻塞;反之会发现,还没有完成事务的数据被读取出来了!

SELECT * FROM dbo.TestA
SELECT * FROM dbo.TestA WITH(NOLOCK)

 插入图示


 


  查询图示



  单独执行完ROLLBACK后会发现,读取不到了,或者执行COMMIT后加不加NOLOCK都能读取数据;

  同理,UPDATE操作时,如果开始了一个事务,当此事务未执行完成,有个查询语句来查询该记录,能不能查询到该记录呢?答案显而易见,能!

  

  首先执行如下修改语句

BEGIN TRAN
UPDATE testA SET Phone='22222'
WHERE id=1 --COMMIT
--ROLLBACK

  
  正常情况未加NOLOCK由于修改事务未完成,查询会阻塞,加上NOLOCK后,查询语句忽略修改操作的锁,直接读取所有数据。

  读取到了!到这已经很清晰了,再执行一次COMMIT或者ROLLBACK,本次事务才算完成;

  然而,加上NOLOCK的查询语句会导致读取到未提交的事务;

  

结语:

  使用NOLOCK要想清楚是否会影响到数据读取,如果不考虑脏读,那么可以放心使用,还能提升查询的性能;

  对于要事务完整性的数据就要好好考虑了。

SQLServer--NOLOCK的更多相关文章

  1. SQLServer性能优化之 nolock,大幅提升数据库查询性能

    公司数据库随着时间的增长,数据越来越多,查询速度也越来越慢.进数据库看了一下,几十万调的数据,查询起来确实很费时间. 要提升SQL的查询效能,一般来说大家会以建立索引(index)为第一考虑.其实除了 ...

  2. sqlserver 中WITH NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX

    https://www.cnblogs.com/sthinker/p/5922967.html SqlServer查询语句中用到的锁 作者: wokofo 前段时间**公司DBA来我们这培训.讲了一大 ...

  3. SQLSERVER 的 nolock 到底是怎样的无锁?

    一:背景 1. 讲故事 相信绝大部分用 SQLSERVER 作为底层存储的程序员都知道 nolock 关键词,即使当时不知道也会在踩过若干阻塞坑之后果断的加上 nolock,但这玩意有什么注意事项呢? ...

  4. 在sqlserver 中with(nolock)详解

      所有Select加 With (NoLock)解决阻塞死锁        在查询语句中使用 NOLOCK 和 READPAST  处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK  ...

  5. sqlserver 中的NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX

    1.NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Rol ...

  6. SQLSERVER中WITH(NOLOCK)详解

    在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAST .有关 NOLOCK 和 READPAST的一些技术知识 ...

  7. sqlserver with(nolock)

    所有Select加 With (NoLock)解决阻塞死锁 在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAS ...

  8. 注意Sqlserver中使用with(nolock)后实际上还是会加架构锁,只是不对要查询的数据加S锁而已(转载)

    开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种.它等同于 READUNCOMMITTED . 具体的功能作用如下所示(摘 ...

  9. sqlserver with(nolock)而mysql 不需nolock

    nolock 是 SQL Server 特有的功能. 例如:对于一个表 A,更新了一行,还没有commit,这时再select * from A 就会死锁.用select * from A(noloc ...

  10. sqlserver查询使用with(nolock)详解

    所有Select加 With (NoLock)解决阻塞死锁 在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAS ...

随机推荐

  1. Qt QTtoolButton 鼠标移动到按钮上时,弹出菜单后,按钮的hover状态无法恢复的问题

    需求:QTtoolButton 鼠标移到按钮上时,弹窗菜单,并且点击菜单或者其他地方,菜单关闭后,按钮的hover状态需要恢复原状. 1. 创建按钮和菜单,并安装事件过滤器 m_Menu = new ...

  2. 03C++顺序结构(2)

    一.变量.赋值语句与表达式 1.天安门广场在北京市中心,它南北长880米,东西宽500米,试编一程序,计算天安门广场面积是多少平方米. 点击查看代码 1 //试编程,计算天安门广场的面积是多少平方米 ...

  3. IOS网络状态变化监听

    IOS网络状态变化监听 使用Alamofire库的NetworkReachabilityManager 一共有三种状态 /// It is unknown whether the network is ...

  4. Flutter ListView报错RenderBox was not laid out: RenderViewport#680c1 NEEDS-LAYOUT NEEDS-PAINT

    RenderBox was not laid out: RenderViewport#680c1 NEEDS-LAYOUT NEEDS-PAINT 使用ListView.builder()布局时,如果 ...

  5. 【网站搭建】开源社区Flarum搭建记录

    环境 服务器系统:腾讯云 OpenCloudOS 宝塔版本:免费版8.0.1 Nginx:1.24.0 MySQL:5.7.42 PHP:8.1.21 萌狼蓝天 2023年8月7日 PHP设置 1.安 ...

  6. 【Javaweb】基础开发流程与介绍

    本文档写于2022年7月29日,由于个人水平有限,可能存在一些问题,因此仅供参考 @萌狼蓝天 JavaWeb基础开发流程 1.确定系统和功能 在此以"宠物管理系统"为例,要开发一个 ...

  7. 黑苹果(Hackintosh) - 安装1:用 VMware pro 16 安装 Big Sur 11.6

    1. 背景情况 1.1 想法 想要体验体验macOS系统,不想花钱买 Macbook,就想着 装一个黑苹果体验下. 1.2 本机基本情况 笔记本:zx6 cp5s1 CPU:i5 8400 主板:H3 ...

  8. 这可能是国内Qt/C++界最受欢迎开源项目之一/5.8Kstar/持续迭代更新

    一.前言 本项目大概在2020年开始的,大概在2022年重写了一遍,主要是分门别类存放.本项目主要是QWidget编写的一些开源的demo,支持Qt4.Qt5.Qt6,支持任意系统,预计会有100多个 ...

  9. Qt编写安防视频监控系统51-功能激活

    一.前言 随着视频监控系统本身功能的增多,以及用户定制功能的增多(比如视频监控系统摇身一变成了机器人监控.无人机监控.挖掘机监控等),除了提供工作模式这个切换开关,还需要对不同的工作模式启用禁用不同的 ...

  10. 【杂谈】Kafka的日志段为什么不用内存映射?

    什么是内存映射(Memory-Mapped File)? 内存映射(mmap)是一种将文件内容映射到内存中的技术,应用程序可以像操作内存一样对文件内容进行读写,而不需要显式地进行磁盘 I/O 操作.修 ...