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 ...
随机推荐
- 基于rsync+sersync的服务器文件同步
参考:https://github.com/wsgzao/sersync 原理 Synchronize files and folders between servers -using inotiy ...
- nginx之日志处理
日常对于NGINX日志文件的处理 1.将访问日志中爬虫相关请求导出 cat access.log | grep Baiduspider > spider.log
- Jx.Cms开发笔记(三)-Views主题动态切换
效果展示 我们可以在后台动态切换主题 目前Jx.Cms有两个主题,其中一个是默认主题,另一个是仿的Blogs主题. 我们可以通过点击启用按钮来动态切换两个主题. 实现方法 首先写一个实现IViewLo ...
- 逆向WeChat(八)
上一篇逆向WeChat(七)是逆向微信客户端本地数据库相关事宜. 本篇逆向微信客户端本地日志xlog相关的事宜. 本篇在博客园地址https://www.cnblogs.com/bbqzsl/p/18 ...
- .NET 服务发现
.NET 服务发现 https://learn.microsoft.com/en-us/dotnet/core/extensions/service-discovery?tabs=dotnet-cli ...
- 搭建SpringBoot中验证数据机制问题 Add a provider like Hibernate Validator (RI) to your classpath
搭建SpringBoot中的验证数据机制时出现的错误 报错代码 java.lang.IllegalStateException: Failed to load ApplicationContext a ...
- Qt音视频开发7-ffmpeg音频播放
一.前言 之前用ffmpeg解码出来了音频,只是做了存储部分,比如存储成aac文件,播放的话早期用的是sdl来播放音频,自从Qt5以后提供了QAudioOutput来播放输入的音频数据,就更加方便了, ...
- 推荐一个windows系统的下载和安装的网址:win7之家
win7之家:http://www.windows7en.com/ 精校 完整 极致 Windows系统下载仓储站HelloWindows :https://hellowindows.cn/
- 携程技术分享:亿级流量的办公IM及开放平台技术实践
本文由携程技术Jim分享,原题"日访问过亿,办公IM及开放式平台在携程的实践",下文进行了排版和内容优化. 1.引言 携程内部的办公IM项目最早在2016年立项,经历了初期简单办公 ...
- 得物自研客服IM中收发聊天消息背后的技术逻辑和思考实现
本文由得物技术WWQ分享,原题"客服发送一条消息背后的技术和思",本文有修订和改动. 1.引言 在企业IM客服场景中,客服发送一条消息的背后,需要考虑网络通信.前端展示.后端存储以 ...