1. 程式人生 > >SQL Server 事務與鎖

SQL Server 事務與鎖

表鎖 沖突 png 使用 庫鎖 實現 有一種 圖片 div

事務就是作為一個邏輯工作單元的SQL語句,如果任何一個語句操作失敗那麽整個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上個節點。為了確保要麽執行,要麽不執行,就可以使用事務。而鎖是實現事務的關鍵,鎖可以保證事務的完整性和並發性。

技術分享圖片

數據庫中的鎖也是為了解決在並發訪問時出現各種沖突的一種機制

技術分享圖片

鎖的目的是什麽?

主要解決多個用戶同時對數據庫的並發操作時會帶來以下數據不一致的問題:

  • 丟失更新,同時修改一條數據
  • 讀臟,A修改了數據後,B讀取後A又取消了修改,B讀臟
  • 不可重復讀,A用戶讀取數據,隨後B用戶讀取該數據並修改,此時A用戶再讀取數據時發現前後兩次的值不一致
  • 還有一種是幻讀,這個情況好像不多。

並發控制的主要方法是封鎖,鎖就是在一段時間內禁止用戶做某些操作以避免產生數據不一致

鎖的粒度有哪些?

  • 數據庫鎖:鎖定整個數據庫,這通常發生在整個數據庫模式改變的時候。
  • 表鎖:鎖定整個表,這包含了與該表相關聯的所有數據相關的對象,包括實際的數據行(每一行)以及與該表相關聯的所有索引中的鍵。
  • 區段鎖:鎖定整個區段,因為一個區段由8頁組成,所以區段鎖定是指鎖定控制了區段、控制了該區段內8個數據或索引頁以及這8頁中的所有數據行。
  • 頁鎖:鎖定該頁中的所有數據或索引鍵。
  • 行或行標識符:雖然從技術上將,鎖是放在行標識符上的,但是本質上,它鎖定了整個數據行。

SQL Server 事務與鎖