日期:2014-05-16 浏览次数:20706 次
语法
SET TRANSACTION ISOLATION LEVEL ????{ READ UNCOMMITTED ????| READ COMMITTED ????| REPEATABLE READ ????| SNAPSHOT ????| SERIALIZABLE ????} [ ; ] |
备注
一次只能设置一个隔离级别选项,而且设置的选项将一直对那个连接始终有效,直到显式更改该选项为止。事务中执行的所有读取操作都会在指定的隔离级别的规则下运行,除非语句的 FROM 子句中的表提示为表指定了其他锁定行为或版本控制行为。
事务隔离级别定义了可为读取操作获取的锁类型。针对 READ COMMITTED 或 REPEATABLE READ 获取的共享锁通常为行锁,尽管当读取引用了页或表中大量的行时,行锁可以升级为页锁或表锁。如果某行在被读取之后由事务进行了修改,则该事务会获取一个用于保护该行的排他锁,并且该排他锁在事务完成之前将一直保持。例如,如果 REPEATABLE READ 事务具有用于某行的共享锁,并且该事务随后修改了该行,则共享行锁便会转换为排他行锁。
当事务进行时,您可以随时将事务从一个隔离级别更改为另一个隔离级别。将事务从一个隔离级别更改为另一个隔离级别之后,便会根据新级别的规则对更改后读取的资源执行保护。更改前读取的资源将继续根据先前级别的规则进行保护,例如,一个事务由 REPEATABLE READ 更改为 SERIALIZABLE。由更改前发出的 SELECT 语句读取的行将继续受到行级、页级或表级共享锁的保护。这些锁会继续保持,直至事务结束。由 SELECT 语句在更改后读取的行将受到范围锁的保护。
该表显示事务从一个隔离级别更改为另一个隔离级别时的锁定行为。
?
READ UNCOMMITTED |
READ UNCOMITTED: 未更改。 READ COMMITTED: 该行为取决于 READ_COMMITTED_SNAPSHOT 数据库选项的设置: 如果为 OFF,事务将获取共享锁,并在读取期间保留锁。 如果为 ON,事务会使用行版本控制。 SNAPSHOT: 事务必须已作为 SNAPSHOT 启动。事务将会失败,并将回滚所有更改。 REPEATABLE READ: 现在该事务将获取共享锁,并在事务期间保留锁。 SERIALIZABLE: 现在该事务将获取范围锁,并在事务期间保留锁。 |
READ COMMITTED |
READ UNCOMITTED: 事务不再获取用于读取操作的锁。 READ COMMITTED: 未更改。 SNAPSHOT: 事务必须已作为 SNAPSHOT 启动。事务将会失败,并将回滚所有更改。 REPEATABLE READ: 现在该事务将获取共享锁,并在事务期间保留锁。 SERIALIZABLE: 现在该事务将获取范围锁,并在事务期间保留锁。 |
SNAPSHOT |
READ UNCOMITTED: 事务不再使用行版本控制,并且不再获取用于读取操作的锁。 READ COMMITTED: 该行为取决于 READ_COMMITTED_SNAPSHOT 数据库选项的设置: 如果为 OFF,事务将获取共享锁,并在读取期间保留锁。 如果为 ON,事务会使用行版本控制。 SNAPSHOT: 未更改。 REPEATABLE READ: 该事务不再使用行版本控制。现在它获取了共享锁,并在事务执行期间一直保持该锁。 SERIALIZABLE: 该事务不再使用行版本控制。现在它获取了范围锁,并在事务执行期间一直保持该锁。 |
REPEATABLE READ |
READ UNCOMITTED: 该事务在读取操作时不再获取锁。在 REPEATABLE READ 下获取的共享锁保留到事务结束。 READ COMMITTED: 该行为取决于 READ_COMMITTED_SNAPSHOT 数据库选项的设置: 如果为 OFF,事务将获取共享锁,并在读取期间保留这些新锁。 如果为 ON,事务会使用行版本控制。 在 REPEATABLE READ 下获取的共享锁保留到事务结束。 SNAPSHOT: 事务必须已作为 SNAPSHOT 启动。事务将会失败,并将回滚所有更改。 REPEATABLE READ:
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|