我创建了一个名为'test_isolation'的数据库,并创建了一个包含数据的表'person'。
现在我在第二个会话中创建了一个事务。
结果���合预期。(请注意,我们尚未提交此事务!)
现在我在会话 3中执行以下查询。
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
现在我在第二个会话中创建了一个事务。
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
GO
BEGIN TRAN
SELECT * FROM PERSON
GO
DELETE FROM PERSON WHERE name = 'test6'
GO
SELECT * FROM PERSON
GO
结果���合预期。(请注意,我们尚未提交此事务!)
现在我在会话 3中执行以下查询。
SELECT * FROM PERSON
第三个会话中的查询一直在无限运行,这意味着表被锁定。
如果我回到第二个会话并提交事务...我就能在第三个会话上运行查询,并且结果符合预期。
事务隔离级别SNAPSHOT不应该锁定表对吧?我是做错了什么还是我的事务SNAPSHOT隔离级别理解有误?
请帮忙……