共用方式為


鎖定提示

您可以使用 SELECT、INSERT、UPDATE 和 DELETE 陳述式來指定資料表層級鎖定提示的範圍,以便修改 Microsoft SQL Server Compact 4.0 的預設鎖定行為。只有在絕對必要時才使用鎖定提示,因為它們可能對並行造成不利影響。

重要

SQL Server Compact 4.0 會自動取得作業所需的鎖定。如果您使用下表中所列的鎖定提示,SQL Server Compact 4.0 會增加發生的鎖定量。您無法使用鎖定提示來避免鎖定資源。

下表說明您可在 SQL Server Compact 4.0 中使用的鎖定提示。

鎖定提示名稱

提示描述

資料粒度

ROWLOCK

讀取或修改資料時使用資料列層級鎖定。這些鎖定會依適當情況被取得及釋放。

SELECT 作業會在資料列上取得 S 鎖定。

PAGLOCK

讀取或修改資料時使用頁面層級鎖定。這些鎖定會依適當情況被取得及釋放。

SELECT 作業會在頁面上取得 S 鎖定。

TABLOCK

讀取或修改資料時使用資料表鎖定。此鎖定會被保留到陳述式結束為止。

SELECT 作業會在資料表上取得 S 鎖定。

DBLOCK

讀取或修改資料時使用資料庫鎖定。此鎖定會被保留到陳述式結束為止。

SELECT 作業會在資料庫上取得 S 鎖定。

LOCKMODES

UPDLOCK

在讀取資料表時使用更新鎖定,而非共用鎖定,並使用保留鎖定直到陳述式或交易結束為止。UPDLOCK 可讓您不會在讀取資料時封鎖其他讀取器,且稍後更新資料時,也可確信自從您上次讀取之後,資料並未發生變更。

SELECT 作業會取得 U 鎖定。預設細微性是 ROWLOCK。

XLOCK

在讀取資料表時使用獨佔鎖定,而非共用鎖定,並使用保留鎖定直到陳述式或交易結束為止。

SELECT 作業會取得 X 鎖定。預設細微性是 ROWLOCK。

持續期間

HOLDLOCK

使用保留鎖定將鎖定保留至交易完成為止,而不會在所需資料表、資料列或資料頁已不再需要時立即釋放鎖定。

如果未指定細微性,將會套用 ROWLOCK。

NOLOCK

不會發出任何鎖定。這是 SELECT 作業的預設值。此鎖定不適用於 INSERT、UPDATE 及 DELETE 陳述式。

附註附註
在 SQL Server 中,使用 NOLOCK 提示會啟用「讀取未認可 (Read Uncommitted)」行為。在 SQL Server Compact 4.0 中,使用 NOLOCK 提示仍然會提供「讀取認可 (Read Committed)」隔離等級。SQL Server Compact 4.0 會維持多份資料複本以確保能夠讀取資料,而不需要使用共用鎖定來協助保護資料。

如需使用鎖定提示的詳細資訊,請參閱《SQL Server 線上叢書》的<鎖定提示>。

NOLOCK 提示

在 SQL Server Compact 4.0 中使用鎖定提示與在 SQL Server 中使用鎖定提示類似。不過,NOLOCK 提示在 SQL Server Compact 4.0 中的行為與在 SQL Server 中的行為有很大的差異。在 SQL Server Compact 4.0 中,NOLOCK 提示是 SELECT 陳述式的預設值,但是這仍然會強制「讀取認可」行為。

在 SQL Server 中,具有預設「讀取認可」隔離等級的 SELECT 陳述式,會導致讀取資料列時在這些資料列上取得並釋放 S 鎖定。雖然這會強制隔離等級,不過也表示如果不相容的鎖定存在於需要 S 鎖定的資料列上,SELECT 陳述式將會等待。當指定 NOLOCK 提示時,SELECT 作業不會先嘗試取得 S 鎖定即讀取資料。雖然這可讓作業成功進行,不過也表示 SELECT 陳述式可能讀取未認可的資料。

SQL Server Compact 4.0 不會使用 S 鎖定來確保資料為「讀取認可」。因為 SQL Server Compact 4.0 在變更資料時使用頁面版本機制,使得 SELECT 陳述式所需的資料可從適當的頁面複本來讀取。而不需要取得 S 鎖定以確保「讀取認可」。因此,雖然 SQL Server Compact 4.0 針對 SELECT 陳述式使用 NOLOCK,不過資料是在「讀取認可」的隔離等級所讀取。您不能在 SQL Server Compact 4.0 中使用 Dirty Read(讀取未認可)。

注意

NOLOCK 提示不會影響 Sch-S 或 Sch-X 鎖定。

請參閱

概念

了解鎖定

交易隔離等級

顯示鎖定資訊

鎖定逾時