鎖定提示
您可以使用 SELECT、INSERT、UPDATE 和 DELETE 陳述式來指定資料表層級鎖定提示的範圍,以便修改 Microsoft SQL Server Compact 3.5 的預設鎖定行為。只有在絕對必要時才使用鎖定提示,因為它們可能對並行造成不利影響。
重要
SQL Server Compact 3.5 會自動取得作業所需的鎖定。如果您使用下表中所列的鎖定提示,SQL Server Compact 3.5 會增加發生的鎖定量。您無法使用鎖定提示來避免鎖定資源。
下表說明您可在 SQL Server Compact 3.5 中使用的鎖定提示。
鎖定提示名稱 |
提示描述 |
---|---|
資料粒度 |
|
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 3.5 中,使用 NOLOCK 提示仍然會提供「讀取認可 (Read Committed)」隔離等級。SQL Server Compact 3.5 會維持多份資料複本以確保能夠讀取資料,而不需要使用共用鎖定來協助保護資料。
|
如需使用鎖定提示的詳細資訊,請參閱《SQL Server 線上叢書》的<鎖定提示>。
NOLOCK 提示
在 SQL Server Compact 3.5 中使用鎖定提示與在 SQL Server 中使用鎖定提示類似。不過,NOLOCK 提示在 SQL Server Compact 3.5 中的行為與在 SQL Server 中的行為有很大的差異。在 SQL Server Compact 3.5 中,NOLOCK 提示是 SELECT 陳述式的預設值,但是這仍然會強制「讀取認可」行為。
在 SQL Server 中,具有預設「讀取認可」隔離等級的 SELECT 陳述式,會導致讀取資料列時在這些資料列上取得並釋放 S 鎖定。雖然這會強制隔離等級,不過也表示如果不相容的鎖定存在於需要 S 鎖定的資料列上,SELECT 陳述式將會等待。當指定 NOLOCK 提示時,SELECT 作業不會先嘗試取得 S 鎖定即讀取資料。雖然這可讓作業成功進行,不過也表示 SELECT 陳述式可能讀取未認可的資料。
SQL Server Compact 3.5 不會使用 S 鎖定來確保資料為「讀取認可」。因為 SQL Server Compact 3.5 在變更資料時使用頁面版本機制,使得 SELECT 陳述式所需的資料可從適當的頁面複本來讀取。而不需要取得 S 鎖定以確保「讀取認可」。因此,雖然 SQL Server Compact 3.5 針對 SELECT 陳述式使用 NOLOCK,不過資料是在「讀取認可」的隔離等級所讀取。您不能在 SQL Server Compact 3.5 中使用 Dirty Read(讀取未認可)。
注意
NOLOCK 提示不會影響 Sch-S 或 Sch-X 鎖定。