事务隔离级别

Microsoft 默认情况下,SQL Server 2005 Compact Edition (SQL Server Compact Edition) 将在“已提交读”隔离级别运行。但是,应用程序可能需要在其他隔离级别上运行。若要在应用程序中实现不同的隔离级别,可以使用 SET TRANSACTION ISOLATION LEVEL 语句设置会话的隔离级别,为整个会话自定义锁定。

重要事项:
尽管 SQL Server Compact Edition 中的默认隔离级别为“已提交读”,但使用此隔离级别不会导致读取数据时采用 S 锁。此行为不同于 Microsoft SQL Server。在 SQL Server 中,当使用“已提交读”时,任何时候读取行,都会请求 S 锁。如果此行上存在冲突的锁,将会等待。SQL Server Compact Edition 并不要求 S 锁,这是因为数据页版本会自动进行维护,以确保提交的数据可在不采用锁的情况下进行读取。这一点至关重要,因为在 SQL Server Compact Edition 中,SELECT 操作并不需要对数据采用任何锁,并且几乎总能成功。如果某些数据具有 X 锁,则 SELECT 操作也不会等待,这一点与 SQL Server 正好相反。SELECT 操作仍需要 Sch-S 锁。只有在修改了表的情况下操作才会失败,因为将存在冲突的 Sch-X 锁。

指定隔离级别后,SQL Server Compact Edition 会话中所有 SELECT 语句的锁定行为都将在此隔离级别上运行,并且在此会话终止之前或在将隔离级别设置为其他级别之前将始终有效。例如,若要将事务隔离级别设置为“可串行读”,并确保并行事务不会将虚构行插入 Employee 表中,可以使用下列 SQL 语句:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

BEGIN TRANSACTION;

SELECT EmployeeID FROM Employee;

您也可以通过编程方式设置事务隔离级别。下面的示例说明如何使用 ADO .NET 设置事务隔离级别:

SqlTransaction myTrans;

myTrans = myConnection.BeginTransaction(IsolationLevel.RepeatableRead);

请参阅

概念

了解锁定
显示锁定信息
锁定提示 (SQL Server Compact Edition)
锁定超时

帮助和信息

获取 SQL Server Compact Edition 帮助