SQL Server 提供多種鎖定提示 (Table Hints) 控制並行存取行為,常用於 SELECT ... FROM Table WITH (HINT)。以下整理 12 種常見提示:
| 提示 | 說明 |
|---|---|
HOLDLOCK | 保持共享鎖至交易結束,等同 SERIALIZABLE。 |
NOLOCK | 不加共享/排他鎖,可能讀到未認可資料 (髒讀),等同 READUNCOMMITTED,僅限 SELECT。 |
PAGLOCK | 指定使用頁鎖 (而非表鎖)。 |
READCOMMITTED | 以已認可讀隔離層級語意執行掃描 (預設行為)。 |
READPAST | 跳過已被鎖定的列,避免阻塞,僅限 READ COMMITTED 隔離層級的 SELECT。 |
READUNCOMMITTED | 等同 NOLOCK。 |
REPEATABLEREAD | 設定交易為可重複讀隔離層級。 |
ROWLOCK | 強制使用列鎖,避免頁/表鎖升級。 |
SERIALIZABLE | 以可序列化隔離層級掃描,等同 HOLDLOCK。 |
TABLOCK | 使用表鎖,陳述式結束釋放;搭配 HOLDLOCK 則持有至交易結束。 |
TABLOCKX | 表排他鎖,阻塞其他讀寫,至陳述式或交易結束。 |
UPDLOCK | 讀取時加更新鎖 (而非共享鎖),持有至陳述式或交易結束,防止讀取後資料被他人修改。 |
NOLOCK 適合報表、唯讀查詢,但須接受髒讀風險。ROWLOCK/PAGLOCK/TABLOCK 可引導鎖粒度,減少升級開銷。UPDLOCK 常用於「先查後更新」模式,避免更新衝突。