3

我正在从以下链接研究 SQL Server 2008 的快照隔离级别。我的困惑是,

http://msdn.microsoft.com/en-us/library/ms173763.aspx

  1. 提到“当前事务开始后其他事务所做的数据修改对当前事务中执行的语句不可见。” -- 似乎其他事务提交的数据对当前快照隔离级别事务不可见;

  2. 提到“在 SNAPSHOT 隔离级别下运行的事务可以查看该事务所做的更改。” -- 似乎其他事务提交的数据对当前快照隔离级别事务是可见的。

好像1和2有冲突?任何意见?

提前谢谢,乔治

4

3 回答 3

8

数字 2 的意思是“我可以看到自己的变化;我看不到其他的变化”

因此,如果我开始交易并进行更改,我可以看到它们。在我的 TXN 看不到我的更改后开始的其他会话/连接的其他事务

于 2009-07-12T08:53:14.180 回答
1

您还需要知道 SNAPSHOT 和 READ COMMITTED SNAPSHOT 之间的区别 - 对于后者,您需要修改来自 BOL 的报价,如下所示:

“在当前 STATEMENT(不是事务!)开始后由其他事务进行的数据修改对当前事务中执行的语句不可见。”

产生重大影响的案例示例:快照隔离何时有帮助,何时有害

于 2009-07-12T18:21:46.807 回答
0

你必须从大局考虑。READ_COMMITTED仅有效/有用。READ_UNCOMMITTED有什么用?哪些业务需要脏读?读序列号?为什么任何业务需求都会强制读取数据的顺序。SQL 服务器设计者没有考虑简化。Oracle 选择只支持一个并且它可以工作。快照是 db 应该如何解决这个问题,所以我们甚至不应该知道。用左脑,我们应该研究如何支持业务逻辑,而不是 DB 本身。

于 2018-08-10T14:28:39.517 回答