我有一个存储过程,可以在单个事务中插入多个表。我知道事务可以通过允许在错误,电源故障等之后进行回滚来维持非并发情况下的数据一致性,但如果其他代码在我提交事务之前从这些表中选择,是否可能选择不一致的数据?
基本上,您可以选择未提交的交易吗?
如果是这样,那么人们通常如何处理这个问题?
答案 0 :(得分:7)
这取决于读取查询的ISOLATION LEVEL而不是事务。这可以在连接上集中设置,也可以在SELECT提示中提供。
请参阅: 连接方:http://msdn.microsoft.com/en-us/library/system.data.isolationlevel.aspx
答案 1 :(得分:1)
正如Aliostad已经提到的,这取决于所选的isolation level。维基百科文章提供了不同常见场景的示例。
所以是的,您可以选择获取未提交的数据,但只能选择。我从来没有这样做过,我不得不承认这个想法对我来说有点危险。但是可能有合理的用例。
答案 2 :(得分:0)
延长Aliostad的回答:
默认情况下,其他读取进程不会读取正在更改的数据(未提交,即“脏读”)。这适用于所有客户和驱动程序
您必须使用NOLOCK提示故意覆盖此默认值或更改隔离级别以允许“脏读”。