现在的位置: 首页 > 综合 > 正文

SQL中事务的隔离级别

2013年09月03日 ⁄ 综合 ⁄ 共 1584字 ⁄ 字号 评论关闭

 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

抱歉!评论已关闭.