我以TableA
作为主键Col1
。我正在运行以下事务而不提交它(用于测试目的)。
BEGIN TRANSACTION
UPDATE TableA
SET Col3 = 0
WHERE Col2 = 'AAA'
同时,我运行以下查询,看到它等待第一个事务完成。
SELECT *
FROM TableA
WHERE Col2 = 'BBB'
但是以下查询会立即返回结果:
SELECT *
FROM TableA
WHERE Col1 = '1'
所以我认为第二个查询可能需要读取具有第一个事务所放置的排他锁的行,以便选择Col2 = 'BBB'
的行。这就是为什么然后我尝试索引Col2
,以便不需要表搜索,但这也不起作用。第二个查询仍在等待第一笔交易。
应采取哪些措施阻止SELECT
阻止(使用NOLOCK
除外)。
P.S:事务隔离级别为“Read Committed”。