在事务提交之前,事务中所做的插入是否可见SELECT

问题描述:

我需要确认。在事务提交之前,事务中所做的插入是否可见SELECT

客户端1在事务内的表中插入行。

客户端2使用SELECT请求此表。如果该客户端隔离级别设置为READ COMMITTED,可以确认的是,SELECT不会返回尚未通过客户承诺1.

感谢

这取决于事务隔离级别的行。 如果隔离级别确实是'读取已提交',其他连接将无法看到另一个客户端在尚未提交的事务中插入的行。

一些阅读:

+1

哪个连接应具有隔离级别“读取已提交”?有交易的人还是选择的人? – 20c 2010-04-09 10:32:17

+2

@ 20c:制作“SELECT”的人。 – 2010-04-09 10:33:51

是的,你的说法是正确的。 READ COMMITTED指定语句不能读取已被修改但未被其他事务处理的数据。

正确。

这样做的MSDN参考是here这(报价)说:

指定语句不能读取 数据已修改但尚未 其它事务提交。这 防止脏读。数据可以通过 当前交易中的 之间的其他交易更改为 ,导致 不可重复读取或幻影数据。 此选项是SQL Server默认值。

SELECT将需要在READ UNCOMMITTED下运行,以便读取已由其他进程修改但尚未提交事务的数据。