游标事务隔离级别

通过结合游标并发设置的锁定行为、该游标 SELECT 中指定的任何锁定提示,以及事务隔离级别选项,可以确定事务锁定行为。

Microsoft SQL Server 支持下列游标事务隔离级别:

  • 已提交读
    SQL Server 在将行读入游标期间会获取一个共享锁,但在读完行之后会立即释放该锁。因为排他锁会阻塞共享锁请求,所以游标无法读取其他任务已更新但尚未提交的行。已提交读是 SQL Server 和 ODBC 的默认隔离级别设置。

  • 未提交读
    SQL Server 在将行读入游标时不需要任何锁,并且不提供任何排他锁。游标可以使用已更新但尚未提交的值来填充。在 SQL Server 中,用户跳过所有锁定事务控制机制。

  • 可重复读或可序列化
    和在 READ COMMITTED 中一样,在将行读入游标时,SQL Server 将在每行上请求一个共享锁,但如果游标是在事务中打开的,则共享锁将保留到事务结束,而不是在读取行后释放共享锁。这与在 SELECT 语句指定 HOLDLOCK 具有同样的效果。

  • 快照
    SQL Server 在将行读入游标时不需要任何锁,并且不提供任何排他锁。游标可以使用第一次启动事务时的时间值来填充。不论是否使用快照隔离,都请求滚动锁。