锁定提示 (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 联机丛书中的“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 锁。 |