Sun*_*nil 7 isolation-level sql-server-2008-r2
对于SQL Server 2008 R2中的SNAPSHOt隔离级别,MSDN ADO.Net文档中提到了以下内容:
修改数据的事务不会阻止读取数据的事务,而读取数据的事务不会阻止写入数据的事务,因为它们通常在SQL Server中的默认READ COMMITTED隔离级别下.
当两个事务都处于SNAPSHOT隔离模式时,没有提到写入是否会阻止写入.所以我的问题如下: 在SNAPSHOT transaction1块中写入是否会写入另一个SNAPHOT transaction2中的相同表?
最近更新
在对我的问题进行了大量思考之后,我将得出如下段所述的结论.希望其他人可以对此有所了解.
没有关系数据库,写入不会阻止写入.换句话说,写入将始终阻止写入.写入包括INSERT或UPDATE或DELETE等语句.无论您使用哪种隔离级别都是如此,因为当数据库中发生多次写入时,所有关系数据库都需要实现数据一致性.当然,同时写入需要是冲突的(如插入同一个表或更新相同的行),以便发生阻塞.
小智 5
Ligos实际上是不正确的 - 如果两个单独的事务试图在Snapshot on的情况下更新相同的记录,则事务2将被阻塞,直到事务1释放锁.然后,只有那时,你会得到错误3960.我意识到这个线程超过2年,但我想避免错过信息在那里.
甚至链接Ligos引用说的与我上面提到的完全相同(查看最后一个非红色段落)
只有在尝试更新的两个记录(即行)不同时,才会阻止写与写