SQLServer--NOLOCK
介绍
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的更多相关文章
- SQLServer性能优化之 nolock,大幅提升数据库查询性能
公司数据库随着时间的增长,数据越来越多,查询速度也越来越慢.进数据库看了一下,几十万调的数据,查询起来确实很费时间. 要提升SQL的查询效能,一般来说大家会以建立索引(index)为第一考虑.其实除了 ...
- sqlserver 中WITH NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX
https://www.cnblogs.com/sthinker/p/5922967.html SqlServer查询语句中用到的锁 作者: wokofo 前段时间**公司DBA来我们这培训.讲了一大 ...
- SQLSERVER 的 nolock 到底是怎样的无锁?
一:背景 1. 讲故事 相信绝大部分用 SQLSERVER 作为底层存储的程序员都知道 nolock 关键词,即使当时不知道也会在踩过若干阻塞坑之后果断的加上 nolock,但这玩意有什么注意事项呢? ...
- 在sqlserver 中with(nolock)详解
所有Select加 With (NoLock)解决阻塞死锁 在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK ...
- sqlserver 中的NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX
1.NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Rol ...
- SQLSERVER中WITH(NOLOCK)详解
在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAST .有关 NOLOCK 和 READPAST的一些技术知识 ...
- sqlserver with(nolock)
所有Select加 With (NoLock)解决阻塞死锁 在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAS ...
- 注意Sqlserver中使用with(nolock)后实际上还是会加架构锁,只是不对要查询的数据加S锁而已(转载)
开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种.它等同于 READUNCOMMITTED . 具体的功能作用如下所示(摘 ...
- sqlserver with(nolock)而mysql 不需nolock
nolock 是 SQL Server 特有的功能. 例如:对于一个表 A,更新了一行,还没有commit,这时再select * from A 就会死锁.用select * from A(noloc ...
- sqlserver查询使用with(nolock)详解
所有Select加 With (NoLock)解决阻塞死锁 在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAS ...
随机推荐
- Qt QTtoolButton 鼠标移动到按钮上时,弹出菜单后,按钮的hover状态无法恢复的问题
需求:QTtoolButton 鼠标移到按钮上时,弹窗菜单,并且点击菜单或者其他地方,菜单关闭后,按钮的hover状态需要恢复原状. 1. 创建按钮和菜单,并安装事件过滤器 m_Menu = new ...
- 03C++顺序结构(2)
一.变量.赋值语句与表达式 1.天安门广场在北京市中心,它南北长880米,东西宽500米,试编一程序,计算天安门广场面积是多少平方米. 点击查看代码 1 //试编程,计算天安门广场的面积是多少平方米 ...
- IOS网络状态变化监听
IOS网络状态变化监听 使用Alamofire库的NetworkReachabilityManager 一共有三种状态 /// It is unknown whether the network is ...
- 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()布局时,如果 ...
- 【网站搭建】开源社区Flarum搭建记录
环境 服务器系统:腾讯云 OpenCloudOS 宝塔版本:免费版8.0.1 Nginx:1.24.0 MySQL:5.7.42 PHP:8.1.21 萌狼蓝天 2023年8月7日 PHP设置 1.安 ...
- 【Javaweb】基础开发流程与介绍
本文档写于2022年7月29日,由于个人水平有限,可能存在一些问题,因此仅供参考 @萌狼蓝天 JavaWeb基础开发流程 1.确定系统和功能 在此以"宠物管理系统"为例,要开发一个 ...
- 黑苹果(Hackintosh) - 安装1:用 VMware pro 16 安装 Big Sur 11.6
1. 背景情况 1.1 想法 想要体验体验macOS系统,不想花钱买 Macbook,就想着 装一个黑苹果体验下. 1.2 本机基本情况 笔记本:zx6 cp5s1 CPU:i5 8400 主板:H3 ...
- 这可能是国内Qt/C++界最受欢迎开源项目之一/5.8Kstar/持续迭代更新
一.前言 本项目大概在2020年开始的,大概在2022年重写了一遍,主要是分门别类存放.本项目主要是QWidget编写的一些开源的demo,支持Qt4.Qt5.Qt6,支持任意系统,预计会有100多个 ...
- Qt编写安防视频监控系统51-功能激活
一.前言 随着视频监控系统本身功能的增多,以及用户定制功能的增多(比如视频监控系统摇身一变成了机器人监控.无人机监控.挖掘机监控等),除了提供工作模式这个切换开关,还需要对不同的工作模式启用禁用不同的 ...
- 【杂谈】Kafka的日志段为什么不用内存映射?
什么是内存映射(Memory-Mapped File)? 内存映射(mmap)是一种将文件内容映射到内存中的技术,应用程序可以像操作内存一样对文件内容进行读写,而不需要显式地进行磁盘 I/O 操作.修 ...