程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> MS SQL基礎教程:數據庫中的鎖

MS SQL基礎教程:數據庫中的鎖

編輯:關於SqlServer

11.5.1 鎖的概念

鎖(Lock) 是在多用戶環境下對資源訪問的一種限制。機制當對一個數據源加鎖後,此數據源就有了一定的訪問限制。我們就稱對此數據源進行了“鎖定”。在SQL Server中,可以對以下的對象進行鎖定:

數據行(Row):數據頁中的單行數據; 索引行(Key):索引頁中的單行數據,即索引的鍵值; 頁(Page):頁是SQL Server 存取數據的基本單位,其大小為8KB; 盤區(Extent):一個盤區由8 個連續的頁組成; 表(Table); 數據庫(Database)。 11.5.2 鎖的類別

在SQL Server 中,鎖有兩種分類方法。

(1) 從數據庫系統的角度來看

鎖分為以下三種類型:

獨占鎖(Exclusive Lock)

獨占鎖鎖定的資源只允許進行鎖定操作的程序使用,其它任何對它的操作均不會被接受。執行數據更新命令,即INSERT、 UPDATE 或DELETE 命令時,SQL Server 會自動使用獨占鎖。但當對象上有其它鎖存在時,無法對其加獨占鎖。獨占鎖一直到事務結束才能被釋放。 共享鎖(Shared Lock)

共享鎖鎖定的資源可以被其它用戶讀取,但其它用戶不能修改它。在SELECT 命令執行時,SQL Server 通常會對對象進行共享鎖鎖定。通常加共享鎖的數據頁被讀取完畢後,共享鎖就會立即被釋放。 更新鎖(Update Lock)

更新鎖是為了防止死鎖而設立的。當SQL Server 准備更新數據時,它首先對數據對象作更新鎖鎖定,這樣數據將不能被修改,但可以讀取。等到SQL Server 確定要進行更新數據操作時,它會自動將更新鎖換為獨占鎖。但當對象上有其它鎖存在時,無法對其作更新鎖鎖定。

(2)從程序員的角度看

鎖分為以下兩種類型:

樂觀鎖(Optimistic Lock)

樂觀鎖假定在處理數據時,不需要在應用程序的代碼中做任何事情就可以直接在記錄上加鎖、即完全依靠數據庫來管理鎖的工作。一般情況下,當執行事務處理時SQL Server會自動對事務處理范圍內更新到的表做鎖定。 悲觀鎖(Pessimistic Lock)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved