SQL SERVER隔离 收藏
SQL SERVER隔离语句如下:
SET TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED
| READ COMMITTED
| REPEATABLE READ
| SNAPSHOT
| SERIALIZABLE
}
[ ; ]
一次只能设置一个隔离级别选项,而且设置的选项将一直对那个连接始终有效,直到显式更改该选项为止。事务中执行的所有读取操作都会在指定的隔离级别的规则下运行,除非语句的 FROM 子句中的表提示为表指定了其他锁定行为或版本控制行为。
事务从一个隔离级别更改为另一个隔离级别时的锁定行为如下表:
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:
未更改。
SERIALIZABLE:
现在该事务将获取范围锁,并在事务期间保留锁。在 REPEATABLE READ 下获取的共享锁保留到事务结束。
示例代码如下:
USE AdventureWorks;
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
BEGIN TRANSACTION;
GO
SELECT *
FROM HumanResources.EmployeePayHistory;
GO
SELECT *
FROM HumanResources.Department;
GO
COMMIT TRANSACTION;
GO
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wuyq11/archive/2008/08/03/2761057.aspx