重庆oracle认证培训机构

新闻分类

产品分类

热门关键词

联系我们

企业名称:重庆科禄德科技有限公司

联系人:冷老师

手机:17754917523

邮箱:93865813@qq.com

网址:www.cqora.com

地址:重庆石桥铺高创锦业

为什么经常在SQL中添加Nolock?

您的当前位置: 首 页 >> 新闻资讯 >> 常见问题

为什么经常在SQL中添加Nolock?

发布日期:2021-09-18 作者: 点击:

为什么经常在SQL中添加Nolock?

那么加与不加的区别是什么?

每次SQL创建一个新的查询,就相当于创建了一个会话在不同的查询窗口中操作,你会从影响到其他会话的查询当一个表人在写关于时,的时候,很可能会停留在时候,当他去查询,即使你只是一个简单的SELECT,你也会一直等待。

我们在这里用事务写表的数据我们知道事务必须在写完表,之后提交或回滚才能释放表,否则他将永远在状态, 阻塞

在插入过程,中,我们写了一个简单的查询语句,看看在没有添加WITH(NOLOCK)和WITH(NOLOCK)的情况下,情况会发生什么。

示例数据

下面是表A,是我们新建的一个非常简单的表。

让我们创建一个包含数据的事务(你可以使用BEGIN  TRAN创建一个事务)。

我们发现影响,有一行,注意这里的会话ID是59(左上角标签, 黄色上的数字)。

不要添加NOLOCK。

我们建造了一个新的查询之窗,然后是查询一表

你可以从上面的查询看到,表A被锁定,我们的查询在状态, 阻塞这里的会话id是60。

这个时候,如果你在会话59的窗口中执行COMMIT或ROLLBACK,会话60的查询结果会立即显示。在这里,为了下面的演示,我们不会暂时提交或回滚时。

添加NOLOCK

让我们建立另一个查询窗口,或查询表,这一次我们将添加NOLOCK。

关注红色, 图标的地方目前会话的ID是55,接下来的60还在执行状态我们加了NOLOCK之后,一瞬间查询出了结果,也给了查询要插在数据,这是为什么?

虽然事务的数据还没有提交,但它实际上已经储存在内存了我们用时候的诺洛克查询去结果,但它实际上还没有储存在硬盘

从以上两个测试,可以看出,诺洛克的作用实际上是为了防止查询和时被阻塞,击败,但这将导致脏读。

那么,什么样的情况通常会使用NOLOCK呢?

通常一些经常写表,无论是插入,更新或删除。这个表在时, 查询,使用NOLOCK非常有效。

和诺洛克的区别。

我不知道小伙伴有没有注意到,但是我提到时写了WITH(NOLOCK),但是测试的时用了(NOLOCK)。他们有什么区别?

为了理解WITH(NOLOCK)和NOLOCK的区别,我们首先来看看下面三个SQL  语句中的区别

从锁定中选择*

选择*从A(无锁);

从A中选择*(无锁定);

(NOLOCK)在这样的写法,NOLOCK其实只是别名,的作用,实质没有作用,所以不要随便把(NOLOCK)写成NOLOCK。

(NOLOCK)和WITH(NOLOCK)其实是一样的在功能(NOLOCK)只是WITH(NOLOCK)的别名,但是在SQL  Server  2008以及以后的版本,(NOLOCK)是不推荐的。写法,没有使用与关键字指定表提示,已经通过了时

在SQL中使用服务器,链接,(NOLOCK)不会生效,但是使用WITH(NOLOCK)会生效。


本文网址:http://www.cqora.com/news/817.html

关键词:MySQL培训,MySQL培训班,MySQL培训机构

最近浏览:

报名咨询

点击咨询报名

QQ群

赛烽达技术群

冷老师

17754917523

加微信咨询

张老师微信.jpg

93865813@qq.com