小编Unn*_*n R的帖子

是否可以使用特定事务的 ReadCommitted 隔离级别覆盖 ReadCommittedSnapshot 隔离级别?

我的数据库的默认隔离级别是“读提交快照”。请看下面的截图。

读取提交的快照

我的数据库中有包含以下数据的“门票”表。

在此处输入图片说明

现在在连接 1 中,我正在启动一个隔离级别为“已提交读”的新事务。我要将#TicketID“2”的优先级更新为“中等

在此处输入图片说明

从连接 2,我试图访问 #TicketID "2" 的详细信息。并且它仍然从由读取提交的快照隔离创建的版本存储中获取值,这不是预期的行为。

在此处输入图片说明

根据文档,如果事务使用“读提交”隔离级别,则在事务执行提交/回滚之前,任何其他事务都无法访问该行。

谁能告诉我为什么在给定的情况下它没有发生?我也很想知道,为什么事务级别的隔离不能覆盖在数据库级别设置的默认隔离级别(这里是读取提交的快照)?


为了更清楚地说明事务范围上的隔离覆盖,我提供了以下信息。

我已将数据库隔离设置为已提交读。

在此处输入图片说明

现在在连接 1 中,我正在启动我的事务以更新票证优先级。

在此处输入图片说明

在连接 2 中,我正在尝试访问记录。但这不会完成,因为事务隔离级别处于“读提交”模式。

在此处输入图片说明

在连接 3 中,我试图访问隔离级别为“未提交读取”的记录。在这里我们可以看到记录,因为它将覆盖在数据库级别设置的默认隔离。

在此处输入图片说明

当我在数据库级别设置“快照隔离”并在另一个事务范围内覆盖它时,我期待相同的行为。对我来说,它总是从版本存储中返回最后提交的值,而不管事务范围中提到的隔离级别如何。我希望我清楚地表达了我的担忧.. :)

sql-server isolation-level snapshot-isolation

2
推荐指数
1
解决办法
510
查看次数