gpt4 book ai didi

sql - 为什么我的整个表被锁定而不是行被锁定?

转载 作者:行者123 更新时间:2023-12-02 18:56:14 25 4
gpt4 key购买 nike

我已经运行了这个 SQL,

create table temp
(
id int,
name varchar(10)
)
insert into temp values(1,'a');

然后我就跑

select 1 from temp  where id = 1 

一切都很好。

然后我运行一个未提交的插入,

SET NOCOUNT ON;
DECLARE @TranCount INT;
SET @TranCount = @@TRANCOUNT;



IF @TranCount = 0
BEGIN TRANSACTION
ELSE
SAVE TRANSACTION Insertorupdatedevicecatalog;

insert into temp values(2,'b')

然后我就跑

select 1 from temp  where id = 1 

但这一次没有返回任何内容。为什么我的整个表被锁定而不是仅第二行被锁定?

最佳答案

SQL Server 没有锁定整个表。我可以看到单个 row-id 被写入事务锁定。

由于没有索引,读者必须扫描整个表。

enter image description here

这意味着它被插入行上的 X 锁阻止。基本上,读取器等待其他事务来决定是否要实际提交该行或回滚。

enter image description here session 51 已插入 id 2。 session 54 是被阻止的选择。这里没有页锁或表锁(除了这里不重要的意向锁)。

事实上,该表是一个堆(没有像平常一样的唯一 CI)会导致此处发生意外锁定。通过在 id 上创建唯一的 CI 即可解决此问题。

关于sql - 为什么我的整个表被锁定而不是行被锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20358938/

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