当READ_COMMITTED_SNAPSHOT启用时,是否存在等效READCOMMITTEDLOCK的事务隔离级别?
READ_COMMITTED_SNAPSHOT启用后,是否存在等效于READCOMMITTEDLOCK的事务隔离级别?
没有直接对应的事务隔离级别。
当数据库开启READ_COMMITTED_SNAPSHOT(RCSI)选项后,默认的SET TRANSACTION ISOLATION LEVEL READ COMMITTED会采用行版本控制读取快照数据,不再对读取的行加共享锁。如果需要还原到RCSI禁用时的READ COMMITTED行为——也就是读取时加共享锁、语句执行完毕后释放锁,同时避免脏读——只能通过在查询语句中使用READCOMMITTEDLOCK表提示实现,例如:
SELECT * FROM YourTable WITH (READCOMMITTEDLOCK);
其他事务隔离级别都无法完全匹配原READ COMMITTED的锁行为:
REPEATABLE READ会保持共享锁直到事务结束,而非语句执行完毕后释放,隔离级别更高;SERIALIZABLE则会加范围锁,进一步提升隔离性;SNAPSHOT或READ COMMITTED SNAPSHOT本身基于行版本控制,不会加锁。
内容的提问来源于stack exchange,提问作者J. Mini
相关产品推荐
相关产品推荐

