这两种隔离级别都是通过行版本控制在tempdb中生成数据的复本来解决数据的写和读的时候发生锁及阻塞的问题的。不过snapshot isolation需要在数据库中执行 ALTER DATABASE Aesop SET ALLOW_SNAPSHOT_ISOLATION ON 之后,然后在执行事务之前,设置连接的隔离级别 SET TRANSACTION ISOLATION LEVEL Snapshot; BEGIN TRAN SELECT Title FROM FABLE WHERE FableID = 2 这时候当发生第二个事务对fableid=2的行进行更新的时候,它可以进行更新,但是在更新事务提交之后,查询事务依然是无法查到更新事务所做的修改,它还是只能查询到原始的数据,这种情况类似于repeatable read隔离级别,但是在repeatable read下,更新事务是无法更新的,直到查询事务提交之后才可以。 Read Committed Snapshot Isolation只是针对sqlserver默认的read committed隔离级别的。使用它需要执行如下sql: ALTER DATABASE Aesop SET READ_COMMITTED_SNAPSHOT ON 如果数据库只是普通的read committed级别下,当执行一个更新事务但没有提交时,再执行一个对更新数据进行查询的事务,查询事务将无法查询,被阻塞,但是在 READ_COMMITTED_SNAPSHOT被打开的情况下,在上面那种情况中,查询事务将不会被阻塞,它能够查询到未更新前的数据。 说句最俗的,Snapshot Isolation是针对SET TRANSACTION ISOLATION LEVEL Snapshot;的,在使用的时候需要在事务前设置隔离级别,而Read Committed Snapshot Isolation完全不需要使用set transaction isolation,因为它是针对数据默认的read committed隔离级别的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。