选择Statement Is Causing Insert语句来阻止

时间:2016-03-17 01:49:11

标签: sql-server locking

预期的共享锁如何影响插入

大家好,

我浏览了一些博客,发现Select语句(共享锁)也可以阻止 插入和更新语句。我明白这是真的,我试图复制这个。 但不知怎的,我无法复制这个。任何人都可以帮我复制这个问题

这就是我想要做的事情

连接1

BEGIN TRAN 
Select * from myBigTable 
COMMIT 

连接2

WHILE (1=1)
BEGIN 
    BEGIN TRAN 
        INSERT INTO MyBigTable(.....)
        SELECT ......
    COMMIT 
END 

但两者都运行良好。有人可以指导我复制这个问题。

由于 阿图尔

1 个答案:

答案 0 :(得分:0)

select语句不会阻止插入

同样,选择不会阻止更新(除非您处于可序列化的隔离级别)。在其他隔离级别中,select将仅对行执行共享锁定直到读取持续时间,但不会结束交易。

请记住隔离级别仅用于select语句,以告诉SQL在选择数据时锁定的时间长度,或者我是否应该使用lock.DDL语句将始终对其修改的数据采用层次顺序的独占锁定