使用具有隔离级别“读取提交的快照”的SQL服务器,我们会定期将数据写入数据库并在同一事务的上下文中进一步读取。通常,当从数据库中读取时,我们会看到我们自己的未提交的更改,但只有其他人提交的更改。我们假设这是预期的行为。
我们现在发现,在一些相对罕见的情况下,我们没有看到我们写的值 - 只是之前提交的值。
任何可能导致不一致的想法?
答案 0 :(得分:0)
Craig Freedman, Serializable vs. Snapshot Isolation Level 黑/白大理石类比
Hugo Kornelis, 4 articles "Snapshot isolation: A threat for integrity":DRI / FK默默地改变到不同的隔离级别
答案 1 :(得分:0)
事实证明,这是SQL Server中已知的不一致:当您从数据库中读取时,您通常会看到自己的事务的未提交更改(在所有隔离级别中),但这并不总能得到保证。在我的情况下,解决方法是使用with (readuncommitted)
,信任应用程序级锁定机制,以防止对同一数据进行并发修改。
我从两位独立的数据库专家那里得到了同样的答案。不幸的是,我没有找到任何关于这个问题的书面参考。