Sql server SQL Server ReadCommitted隔离级别实际上是如何工作的?
我在MSDN文档中发现了两个关于Sql server SQL Server ReadCommitted隔离级别实际上是如何工作的?,sql-server,Sql Server,我在MSDN文档中发现了两个关于ReadCommitted如何工作的不一致描述: 指定语句不能读取已修改但未由其他事务提交的数据 指定在读取数据时保持共享锁以避免脏读 我很困惑:在ReadCommitted的情况下,SQL Server是在读取还是在写入未提交的数据时锁定?请澄清谁肯定写X锁。总是。这是为了保证回滚能够工作。回滚需要已知且稳定的数据 关于读取:RC保证没有未提交的写入对RC读取器可见。RC可以被认为是对正在读取的数据采取短期S锁。不过,有一个例外:SQLServer有一个
ReadCommitted
如何工作的不一致描述:
我很困惑:在
ReadCommitted
的情况下,SQL Server是在读取
还是在写入
未提交的数据时锁定?请澄清谁肯定写X锁。总是。这是为了保证回滚能够工作。回滚需要已知且稳定的数据
关于读取:RC保证没有未提交的写入对RC读取器可见。RC可以被认为是对正在读取的数据采取短期S锁。不过,有一个例外:SQLServer有一个优化,它不会对未修改页面上的行使用S锁。这意味着您可以读取在其他事务中X锁定的RC下的行(!)。这很好地履行了不读取未提交数据的契约
示例:如果有一个写传输修改了数据库的任何子集,则100%可以肯定,在编写器提交之前,RC读取器不会察觉到这些更改
RC的保证非常弱,通常只能在您根本不关心数据一致性的情况下使用