我正在从以下链接学习SQL Server 2008的快照隔离级别。我的困惑是,
http://msdn.microsoft.com/en-us/library/ms173763.aspx
提到“当前事务开始后其他事务所做的数据修改对当前事务中执行的语句不可见”。 - 其他事务提交的数据似乎对当前快照隔离级别事务不可见;
提到“在SNAPSHOT隔离级别下运行的事务可以查看该事务所做的更改。” - 其他事务提交的数据似乎对当前快照隔离级别事务可见。
似乎1和2是冲突的?有什么意见吗?
提前谢谢, 乔治答案 0 :(得分:8)
数字2表示“我可以看到自己的变化;我看不到其他变化”
因此,如果我开始交易并进行更改,我可以看到它们。其他会话/连接的其他事务在我的TXN看不到我的更改后启动
答案 1 :(得分:1)
您还需要知道SNAPSHOT和READ COMMITTED SNAPSHOT之间的区别 - 对于后者,您需要按如下方式修改BOL的报价:
“当前开始后其他事务所做的数据修改 STATEMENT(非事务!)对当前事务中执行的语句不可见。“
答案 2 :(得分:0)
您必须考虑大局。 READ_COMMITTED 仅有效/有用。 READ_UNCOMMITTED 的用途是什么?哪些业务需要脏读?读串口?为什么任何业务需求都会强制要求读取数据。 SQL Server设计人员不必费心考虑简化。 Oracle选择仅支持一种,并且可以使用。快照是db如何解决此问题的方法,因此我们甚至都不知道。用左脑,我们应该研究如何支持业务逻辑,而不是数据库本身。