繁体   English   中英

从用已读提交的IsolationMode锁定的SQL Server表中选择所有行

[英]Selecting all rows from a SQL Server table locked with the readcommited IsolationMode

我的一个客户会话从事务在表中创建一个条目并继续其处理。 事务在read committed的隔离模式下运行。 同时,另一个客户端会话报告表中的所有数据。

由于锁定行(由其他客户端插入),因此全选操作现在已完全锁定。

如何在全选期间检索提交的数据,而不是完全锁定?

任何帮助将不胜感激。

您尚未真正确定使用场景的具体细节,但是有可能从表中取出数据,但有一些严重的警告

您可以使用marc_s所说的READ UNCOMMITTED快照隔离级别,其作用WITH (NOLOCK)在事务中所有select语句上使用WITH (NOLOCK)作用相同。 如果您只想读取该表,但通常会处理事务中的所有其他读取,那么最好将NOLOCK提示放在查询中的特定表上。 因此,例如:

SELECT *
  FROM firstTable f INNER JOIN
       secondTable s WITH (NOLOCK) on f.Key = s.Key

这将为firstTable发出普通的读取锁,但secondTable带任何锁读取secondTable 没有锁会非常危险-因为您可以有效地破坏数据。 如果执行插入操作会重新排序数据并导致页面拆分,那么您可以两次退出同一行,并且会遇到各种类似的不愉快情况。

因此有可能,但这并不理想,因此您应警惕这种效果 杰森·斯特拉特(Jason Strate)提供了一些不错的进一步阅读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM