鎖是多使用者環境下控制資源存取的核心機制。加鎖後,資源依鎖模式限制其他連線的讀寫行為。
| 鎖模式 | 行為 | 典型觸發操作 | 釋放時機 |
|---|---|---|---|
| 獨佔鎖 | 僅持有者可存取,其他所有操作阻擋 | INSERT, UPDATE, DELETE | 交易結束(COMMIT/ROLLBACK) |
| 共享鎖 | 允許並發讀取,禁止修改 | SELECT | 讀取完成即釋放(視隔離等級而定) |
| 更新鎖 | 防止死鎖:允許讀取,禁止修改;確定更新時轉為獨佔鎖 | 準備更新資料前 | 轉為獨佔鎖或交易結束 |
| 策略 | 核心假設 | 實作方式 | 適用場景 |
|---|---|---|---|
| 樂觀鎖 | 衝突極少見 | 不在程式碼顯式加鎖,依賴資料庫版本戳/時間戳/檢查和碼於更新時驗證 | 高讀低寫、離線編輯、長交易 |
| 悲觀鎖 | 衝突常態 | 程式碼明確要求資料庫加鎖(如 SELECT ... FOR UPDATE、UPDLOCK 提示) | 高併發寫入、嚴格一致性需求 |
READ COMMITTED 使用共享鎖讀取、獨佔鎖寫入。UPDLOCK)。sp_lock、sys.dm_tran_locks、Profiler Lock 事件。理解鎖層級、三大模式與樂觀/悲觀兩種設計哲學,是解決並發衝突、避免死鎖、調效能的基礎。實務上多採混合策略:核心交易悲觀鎖,長業務流程樂觀鎖。