博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SqlServer查询语句中用到的锁
阅读量:5127 次
发布时间:2019-06-13

本文共 1024 字,大约阅读时间需要 3 分钟。

前段时间**公司DBA来我们这培训。讲了一大堆MYSQL的优化。 QA环节一程序员问“SQL语句中的 with nolock 除了不锁表外,是否能读其他锁住的数据"。

  讲课的人嘟嘟了半天没解释清楚(有可能是MYSQL里没有这个机制),公司的另一程序员给出了一个很简洁明了的回答:

  WITH NOLOCK 除了本身不锁表(不加任何锁) 也不会受其他的已存在的锁影响,锁住的行数据也照样读,个人认为这句话说得很清楚明了,一句话就能说明白的事,不过好奇怪的是程序员经常用这个语句竟然也不去试一下。这里顺便总结一下 其他的 SQLSERVER 中的with锁级别:

  WITH NOLOCK:无锁

  WITH HOLDLOCK:挂一个保持锁

  WITH UPDLOCK:挂一个更新锁

  WITH XLOCK:挂一个排他锁

  需要注意的是 with nolock 是不能用于update,delete insert 这种更新语句的,说绕了。简单的说 with nolock 只能用于select。

  例如:update dbo.test with(NOLOCK) set username='wokofo' --这样的语句是错误的

  弹回:INSERT、UPDATE、DELETE 或 MERGE 语句的目标表不允许使用 NOLOCK 和 READUNCOMMITTED 锁提示。

  实际使用:

select
top
10
*
from
 dbo.test 
with
(NOLOCK)
select
top
10
*
from
 dbo.test 
with
(
HOLDLOCK
)
select
top
10
*
from
 dbo.test 
with
(XLOCK)
select
top
10
*
from
 dbo.test 
with
(UPDLOCK)
update
 dbo.test 
with
(
HOLDLOCK
) 
set
 username
=
'
wokofo
'

update
 dbo.test 
with
(XLOCK) 
set
 username
=
'
wokofo
'

update
 dbo.test 
with
(UPDLOCK) 
set
 username
=
'
wokofo
'

转载于:https://www.cnblogs.com/sunshch/archive/2013/04/02/2994771.html

你可能感兴趣的文章
MOOC《Python网络爬虫与信息提取》学习过程笔记【requests库】第一周1-3
查看>>
final、finally和finalize的区别
查看>>
[题解]Mail.Ru Cup 2018 Round 1 - A. Elevator or Stairs?
查看>>
ABAP术语-Purchase Order
查看>>
通用权限管理设计篇_设计模式
查看>>
git分支的创建、删除、切换、合并
查看>>
SpringBoot学习(四)-->SpringBoot快速入门,开山篇
查看>>
接口测试相关知识
查看>>
蓝桥杯决赛第一题
查看>>
vue下axios和fetch跨域请求
查看>>
好的开始
查看>>
利用FFmpeg转压视频的说明
查看>>
测试课程总结2017
查看>>
chaotic and twirly用法
查看>>
ThreadLocal
查看>>
前端工程与性能优化
查看>>
使用Spring的@Scheduled实现定时任务
查看>>
字符串中最长不重合子串长度
查看>>
Zato入门part2
查看>>
java sendmail
查看>>