【发布时间】:2013-04-04 17:19:49
【问题描述】:
我创建了一个名为“test_isolation”的数据库并创建了一个包含数据的表“人”
name age
---- ---
test1 1
test2 2
test3 3
test4 4
test5 5
test6 6
现在数据库已更改为允许在 session1
中进行快照隔离ALTER DATABASE test_isolation
SET ALLOW_SNAPSHOT_ISOLATION ON
GO
现在我在 会话 2
中创建一个事务SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
GO
BEGIN TRAN
SELECT * FROM PERSON
GO
DELETE FROM PERSON WHERE name = 'test6'
GO
SELECT * FROM PERSON
GO
结果符合预期。 (注意我们还没有提交这个交易!)
现在我在 session 3
中执行以下查询SELECT * FROM PERSON
会话 3 中的查询继续无限运行,这意味着表已锁定。
如果我返回会话 2 并提交事务。我可以在会话 3 上运行查询,结果符合预期。
事务隔离级别SNAPSHOT不应该锁定表吧?是我做错了什么还是我对事务SNAPSHOT隔离的理解有误?
请帮忙..
【问题讨论】:
标签: sql-server sql-server-2008 tsql transaction-isolation