Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server ReadCommitted隔离级别实际上是如何工作的?_Sql Server - Fatal编程技术网

Sql server SQL Server ReadCommitted隔离级别实际上是如何工作的?

Sql server SQL Server ReadCommitted隔离级别实际上是如何工作的?,sql-server,Sql Server,我在MSDN文档中发现了两个关于ReadCommitted如何工作的不一致描述: 指定语句不能读取已修改但未由其他事务提交的数据 指定在读取数据时保持共享锁以避免脏读 我很困惑:在ReadCommitted的情况下,SQL Server是在读取还是在写入未提交的数据时锁定?请澄清谁肯定写X锁。总是。这是为了保证回滚能够工作。回滚需要已知且稳定的数据 关于读取:RC保证没有未提交的写入对RC读取器可见。RC可以被认为是对正在读取的数据采取短期S锁。不过,有一个例外:SQLServer有一个

我在MSDN文档中发现了两个关于
ReadCommitted
如何工作的不一致描述:

  • 指定语句不能读取已修改但未由其他事务提交的数据

  • 指定在读取数据时保持共享锁以避免脏读


  • 我很困惑:在
    ReadCommitted
    的情况下,SQL Server是在
    读取
    还是在
    写入
    未提交的数据时锁定?请澄清谁肯定写X锁。总是。这是为了保证回滚能够工作。回滚需要已知且稳定的数据

    关于读取:RC保证没有未提交的写入对RC读取器可见。RC可以被认为是对正在读取的数据采取短期S锁。不过,有一个例外:SQLServer有一个优化,它不会对未修改页面上的行使用S锁。这意味着您可以读取在其他事务中X锁定的RC下的行(!)。这很好地履行了不读取未提交数据的契约

    示例:如果有一个写传输修改了数据库的任何子集,则100%可以肯定,在编写器提交之前,RC读取器不会察觉到这些更改

    RC的保证非常弱,通常只能在您根本不关心数据一致性的情况下使用