SQL Server 中的 NOLOCK 到底是什么意思?

 我来答
唯爱一梦804289
2013-08-24 · TA获得超过320个赞
知道答主
回答量:140
采纳率:100%
帮助的人:74.4万
展开全部
我先说下其区别,之后再做测试。 大家都知道,每新建一个查询,都相当于创建一个会话,在不同的查询分析器里面进行的操作,可以影响到其他会话的查询,极端的情况可能会一直处于阻塞中,哪怕只是一个很简单的查询都“特别慢”。BEGINTRAN是开始一个事务的意思,开始之后可执行一些SQL语句,接着需要执行COMMIT进行提交或者ROLLBACK进行回滚,否则就会出现上面的情况。但如果使用NOLOCK进行查询的时候,就不会因为别的回话没有提交或回滚,而受阻塞。所以概括起来,可以用以下语句来总结:NOLOCK能使当前会话的查询,不受其它会话的事务所阻塞。 但是这样做,就读取了其它事务的 “修改后未提交的”数据。 现在我们进行测试,一定要注意,必须在多个会话下才可以,也就是说,需要建三个查询分析器窗口。 表用最简单的表,自己动手建一个。 查询分析器一:执行 SELECT * FROM dbo.test_main得到idvalue1one2two3three4four 接着执行如下:BEGIN TRAN INSERT INTO test_main VALUES(5, 'five')一行受影响 查询分析器二:执行 SELECT * FROM dbo.test_main 则卡死,受上一会话所阻塞。查不出结果。 之后此查询立刻显示结果。 查询分析器三:执行 SELECT * FROM test_main(NOLOCK)则显示如下idvalue1one2two3three4four5five 但最后一行并没有真正存储在数据库中,因为会话一还没有进行提交,我们用NOLOCK就查询出来了。 一个经常操作的表,并且每次操作都很重要,这样一般要用到事务进行处理,因为可以避免出错的几率, 我们查询时,要用NOLOCK,否则遇上卡死的几率很大。别人执行一个事务,还没处理完呢,你就查询了,那就卡死了。有了NOLOCK就可以解决这个问题了。
网易云信
2023-12-06 广告
UIkit是一套轻量级、模块化且易于使用的开源UI组件库,由YOOtheme团队开发。它提供了丰富的界面元素,包括按钮、表单、表格、对话框、滑块、下拉菜单、选项卡等等,适用于各种类型的网站和应用程序。UIkit还支持响应式设计,可以根据不同... 点击进入详情页
本回答由网易云信提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式