SQL Server快照隔离级别问题

3
我正在学习SQL Server 2008的快照隔离级别,参考以下链接:http://msdn.microsoft.com/en-us/library/ms173763.aspx 我的困惑是:
1. 文中提到:“在当前事务开始后由其他事务所做的数据修改对当前事务中执行的语句不可见。”——似乎已提交的数据对当前快照隔离级别事务不可见; 2. 文中提到:“在快照隔离级别下运行的事务可以查看该事务所做的更改。”——似乎已提交的数据对当前快照隔离级别事务可见。
似乎1和2有冲突?有什么建议吗?
谢谢! George
3个回答

8

数字2表示“我能看到自己的更改,但看不到其他人的更改”

因此,如果我开始一个事务并进行更改,我可以看到它们。在我的TXN之后启动的其他会话/连接的其他事务无法看到我的更改。


1
有时候我也会有阅读 BOL 的困难,尽管我是以英语为母语的人... 前几天我的(德国)同事向我求助于 BOL 中的某个问题,我不得不思考一下才能帮他! - gbn
1
在BOL中添加有关事务能够读取自己更新的评论至少是令人困惑的。因为没有其他方法!所有事务,在任何隔离级别下,都能够读取自己的更新!通过明确重新说明它只会让读者想知道“这个不可能是真的吗?”。这只会让人感到困惑。 - Remus Rusanu
BOL是什么的缩写?我能想到几个,但我不认为它们适用于这个讨论。 - 37Stars

1
你还需要了解 SNAPSHOT 和 READ COMMITTED SNAPSHOT 之间的区别,对于后者,您需要根据 BOL 中的语句进行修改,如下所示:
“在当前语句(而非事务)启动后由其他事务进行的数据修改对于在当前事务中执行的语句不可见。”
一个使差异变得很大的情况示例:当快照隔离有帮助和有害时

0
你必须考虑整体。 READ_COMMITTED 是唯一有效/有用的选项。那么READ_UNCOMMITTED 有什么用处呢?业务上为什么需要脏读或者串行读?为什么任何业务需求都要强制数据读取排序?SQL Server 的设计者没有想过简化这个问题。Oracle 选择只支持一个,而它也起到了作用。快照是数据库应该解决这个问题的方法,所以我们甚至不需要知道。我们应该用左脑来思考如何支持业务逻辑,而不是数据库本身。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接