sqlserver中with(nolock)深入分析
select * from t2 WITH(NOLOCK) where UserID = 2
BEGIN TRANSACTION
ROLLBACK TRANSACTION
在查询语句中使用 NOLOCK 和 READPAST
对于非银行等严格要求事务的行业,搜索记录中出现或者不出现某条记录,都是在可容忍范围内,所以碰到死锁,应该首先考虑,我们业务逻辑是否能容忍出现或者不出现某些记录,而不是寻求对双方都加锁条件下如何解锁的问题。
这个演示同样需要两个查询窗口。
CREATE TABLE t1 (c1 int IDENTITY(1,1), c2 int)
BEGIN TRANSACTION
清除掉这个测试环境,需要在查询窗口一中再执行如下语句:
select count(*) from t1 就会看到这个执行很久不能执行完毕,因为这个查询遇到了一个死锁。
update t2 set NickName = '蝈蝈俊.net' where UserID = 2
insert t2(UserID,NickName) values(1,'郭红俊')
下面就来演示这个情况
演示二:对被锁住的记录,NOLOCK 和 READPAST处理的策略
NOLOCK 和 READPAST 都是处理查询、插入、删除等操作时候,如何应对锁住的数据记录。但是这时候一定要注意NOLOCK 和 READPAST的局限性,确认你的业务逻辑可以容忍这些记录的出现或者不出现:
不使用 NOLOCK 和 READPAST ,在 Select 操作时候则有可能报错误:事务(进程 ID **)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。
drop table t1
请在查询窗口二中执行如下脚本:
select count(*) from t1 WITH(NOLOCK)
insert t1(c2) values(1)
如果这时候我们在查询窗口二中执行:
CREATE TABLE t2 (UserID int , NickName nvarchar(50))
处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAST 。有关 NOLOCK 和 READPAST的一些技术知识点:
演示一 没有提交的事务,NOLOCK 和 READPAST处理的策略:
请在查询窗口一中执行如下语句:
在查询窗口一执行后,查询窗口二执行如下脚本:
查询窗口二中, NOLOCK 对应的查询结果中我们看到了修改后的记录,READPAST对应的查询结果中我们没有看到任何一条记录。这种情况下就可能发生脏读
查询窗口一请执行如下脚本:
结果与分析:
go
查询窗口二依次显示统计结果为: 1、0
简单来说:
go
结果与分析:
READPAST 会把被锁住的行不显示出来
查询窗口一的命令没有提交事务,所以 READPAST 不会计算没有提交事务的这一条记录,这一条被锁住了,READPAST 看不到;而NOLOCK则可以看到被锁住的这一条记录。
为了演示两个事务死锁的情况,我们下面的测试都需要在SQL Server Management Studio中打开两个查询窗口。保证事务不被干扰。
NOLOCK 可能把没有提交事务的数据也显示出来.
insert t2(UserID,NickName) values(2,'蝈蝈俊')
select * from t2 WITH(READPAST) where UserID = 2
go
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/sql/mssql/2283.shtml
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
sql server 关于设置null的一
时间:2020-12-28
-
详解SQL游标的用法
时间:2020-12-27
-
vs code连接sql server数据库步
时间:2020-12-27
-
图书管理系统的sqlserver数
时间:2020-12-25
-
详解SQL 通配符
时间:2020-12-25
-
sql四大排名函数之ROW_NUM
时间:2020-12-25
-
SQLServer数据库处于恢复挂
时间:2020-12-24
-
Win10 64位安装个人版SQL20
时间:2020-12-24
热门文章
-
sqlserver中查询横表变竖表的sql语句简析
时间:2020-12-08
-
关于SQL Server查询语句的使用
时间:2020-12-13
-
SQL Server简单模式下误删除堆表记录恢复方
时间:2020-12-12
-
MSSQL教程_mssql数据库教程_MSSQL基础教程_第
时间:2020-12-13
-
详解SQL游标的用法
时间:2020-12-27
-
sql server 关于设置null的一些建议
时间:2020-12-28
-
jdbc连接sql server数据库问题分析
时间:2020-12-10
-
mssql关于一个表格结构的另外一种显示(表
时间:2020-12-11
-
SQL Server数据库入门学习总结
时间:2020-12-10
-
使用SqlBulkCopy时应注意Sqlserver表中使用缺
时间:2020-12-09
