gpt4 book ai didi

sql-server - 长时间运行的查询是否会阻止对相关表的插入?

转载 作者:行者123 更新时间:2023-12-01 06:19:19 26 4
gpt4 key购买 nike

假设我有两个表:

Table 1
[Clustered Id] [Text Field]

Table 2
[Clustered Id] [Numeric Field]

然后我有一个问题:

select *
from [Table 1]
,[Table 2]
where [Table 1].[Clustered Id] = [Table 2].[Clustered Id]
and [Table 1].[Text Field] like '%some string%'

假设我的插入插入一行,看起来像这样:

insert into [Table 2]
values (new clustered ID)
,-182

如果此查询需要很长时间才能运行,那么在此期间是否可以插入到[Table 2]?如果是这样,细微差别是什么?如果不是,我可以做些什么来避免它?

最佳答案

是的,select 将使用共享锁来防止更新锁。

您可以在选择上使用提示“with (nolock)”,这样它就不会获取共享锁并且不会阻止更新锁。但坏事可能会发生。这个网站上的很多人会告诉你永远不要那样做。

如果更新只需要一个行锁,那么只需要打开该行。

在更新时,将 <> 镜像添加到集合中确实有帮助,这样它就不会锁定

update table1  
set col1 = 12
where col3 = 56
and co1 <> 12 -- will not take an update lock

插入是不同的,因为它只会阻塞在 pagelock 和 tablock 上。
请发布您的插入内容以及您要插入的行数。

如果您使用制表 block ,那么我认为插入会被阻止。即使有可重复读取,我也不认为选择会阻止插入。

关于sql-server - 长时间运行的查询是否会阻止对相关表的插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38536898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com