我的数据库的默认隔离级别是“读提交快照”。请看下面的截图。
我的数据库中有包含以下数据的表“Tickets”。
现在在连接 1 中,我开始一个隔离级别为“已提交读取”的新事务。我要将#TicketID“2”的优先级更新为“中”
从连接 2,我试图访问#TicketID“2”的详细信息。并且它仍然从由读取提交快照隔离创建的版本存储中获取值,这不是预期的行为。
根据文档,如果事务使用“已提交读取”隔离级别,则在事务执行提交/回滚之前,任何其他事务都无法访问该行。
谁能告诉我为什么在给定的情况下没有发生这种情况?我也很想知道,为什么事务级别的隔离不能覆盖在数据库级别设置的默认隔离级别(此处为读取提交的快照)?
为了更清楚地说明事务范围的隔离覆盖,我提供了以下信息。
我已将我的数据库隔离设置为读取已提交。
现在在连接 1 中,我正在启动我的事务以更新票证优先级。
在连接 2 中,我正在尝试访问记录。但这不会完成,因为事务隔离级别处于“已提交读”模式。
在连接 3 中,我试图访问隔离级别为“读取未提交”的记录。在这里我们可以看到记录,因为它将覆盖在数据库级别设置的默认隔离。
当我在数据库级别设置“快照隔离”并在另一个事务范围内覆盖它时,我期待相同的行为。对我来说,它总是从版本存储中返回最后提交的值,而不管事务范围中提到的隔离级别如何。我希望我清楚地表达了我的担忧.. :)