锁定提示 (SQL Server Compact Edition)

通过使用 SELECT、INSERT、UPDATE 和 DELETE 语句来修改 Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) 的默认锁定行为,可以指定一系列的表级锁定提示。只有在绝对需要时,才能使用锁定提示。锁定提示对并发操作有负面影响。

重要事项:
SQL Server Compact Edition 会自动获取操作必需的锁。如果使用下表列出的锁定提示,SQL Server Compact Edition 将增加发生的锁定次数。不能使用锁定提示来避免对资源的锁定。

下表列出了可以在 SQL Server Compact Edition 中使用的锁定提示:

锁定提示名称 提示说明

GRANULARITY

ROWLOCK

在读取或修改数据时,使用行级锁。可以在适当的情况下获取和释放这些锁。

SELECT 操作将对行采用 S 锁。

PAGLOCK

在读取或修改数据时,使用页级锁。可以在适当的情况下获取和释放这些锁。

SELECT 操作将对页采用 S 锁。

TABLOCK

在读取或修改数据时,使用表锁。此锁将持有到语句结束。

SELECT 操作将对表采用 S 锁。

DBLOCK

在读取或修改数据时,使用数据库锁。此锁将持有到语句结束。

SELECT 操作将对数据库采用 S 锁。

LOCKMODES

UPDLOCK

在读取表时,使用更新锁替代共享锁,并且在语句或事务结束之前一直使用持有锁。使用 UPDLOCK,您可以读取数据而不会阻塞其他读取者,确保自最后一次读取数据时起至以后更新数据时为止,数据不会发生更改。

SELECT 操作将采用 U 锁。默认粒度是 ROWLOCK。

XLOCK

在读取表时,使用排他锁替代共享锁,并且在语句或事务结束之前一直使用持有锁。

SELECT 操作将采用 X 锁。默认粒度是 ROWLOCK。

DURATION

HOLDLOCK

使用持有锁可以使锁持有到事务完成,而不是一旦所需的表、行或数据页不再需要时就释放锁。

如果没有指定粒度,将使用 ROWLOCK。

NOLOCK

不采用任何锁。对于 SELECT 操作,这是默认值。它不适用于 INSERT、UPDATE 和 DELETE 语句。

注意:
在 SQL Server 中,NOLOCK 提示将启用“未提交读”行为。在 SQL Server Compact Edition 中,使用 NOLOCK 提示仍会赋予“已提交读”隔离级别。SQL Server Compact Edition 将维护数据副本,以确保可以读取数据而不需要使用共享锁帮助保护数据。

有关使用锁定提示的详细信息,请参阅 SQL Server 联机丛书中的“Locking Hints”。

NOLOCK Hint

在 SQL Server Compact Edition 中使用锁定提示类似于在 SQL Server 中使用锁定提示。但是,与 SQL Server 相比,SQL Server Compact Edition 中 NOLOCK 提示的行为有很大的不同。在 SQL Server Compact Edition 中,NOLOCK 提示是 SELECT 语句的默认值,但这仍然会强制执行“已提交读”行为。

在 SQL Server 中,如果 SELECT 语句的默认隔离级别是“已提交读”,将在导致读取行时对行采用并释放 S 锁。尽管这会强制应用隔离级别,但它意味着,如果需要 S 锁的行上存在不兼容的锁,SELECT 语句将会等待。指定 NOLOCK 提示后,SELECT 操作不会尝试采用 S 锁,数据将可以读取。尽管这样操作可以成功,但它也意味着 SELECT 语句可以读取未提交的数据。

SQL Server Compact Edition 不会采用 S 锁来确保数据是“已提交读”的。因为在更改数据时,SQL Server Compact Edition 使用的是页版本控制机制,所以可以从合适的页副本中读取 SELECT 语句所需的数据。不需要采用 S 锁来确保“提交读”。因此,尽管在 SQL Server Compact Edition 中对 SELECT 语句使用 NOLOCK,但数据仍然是在“已提交读”隔离级别上读取的。在 SQL Server Compact Edition 中,不能进行脏读(“未提交读”)。

注意:
NOLOCK 提示不会影响 Sch-S 或 Sch-X 锁。

请参阅

概念

了解锁定
事务隔离级别
显示锁定信息
锁定超时

帮助和信息

获取 SQL Server Compact Edition 帮助