隔离级别定义事务操作资源和更新数据的隔离程度,在SQL Server中,隔离级别只会影响读操作申请的共享锁,而不会影响写操作申请的互斥锁。隔离级别控制事务在执行读操作时:在读数据时是否使用共享锁,申请何种类型的隔离级别;事务持有读锁的时间读操作引用其他事务更新的数据行时,控制读操 ...
隔离级别定义事务操作资源和更新数据的隔离程度,在SQL Server中,隔离级别只会影响读操作申请的共享锁,而不会影响写操作申请的互斥锁。隔离级别控制事务在执行读操作时:
- 在读数据时是否使用共享锁,申请何种类型的隔离级别;
- 事务持有读锁的时间
- 读操作引用其他事务更新的数据行时,控制读操作的行为:
- 被阻塞,等待其他事务释放互斥锁;
- 读取事务提交后的版本,该数据行在事务开始时存在;Retrieves the committed version of the row that existed at the time the statement or transaction started.
- 读没有提交的数据;
在执行写操作时,事务持有互斥锁,直到事务结束才释放,互斥锁不受事务隔离级别的影响。隔离性和并发性是此消彼长的关系。在SQL Server中,互斥锁和任意锁都不兼容,在同一时间,同一个数据行上,只能有一个事务持有互斥锁,就是说,写操作是顺序进行的,不能并发。
Choosing a transaction isolation level does not affect the locks acquired to protect data modifications. A transaction always gets an exclusive lock on any data it modifies, and holds that lock until the transaction completes, regardless of the isolation level set for that transaction.
事务的隔离级别共有5个,使用SET命令修改Session-Level的隔离级别,使用DBCC UserOptions 查看当前Session的隔离级别:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLEDBCC UserOptions
原标题:数据库的快照隔离级别(Snapshot Isolation)
关键词:数据库
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。