<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    北大青鳥IT教育博客

     

    SQL SERVER中如何使用行鎖

    一.SQL SERVER 中 為什么要引入鎖

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

      丟失更新

      A,B兩個用戶讀同一數據并進行修改,其中一個用戶的修改結果破壞了另一個修改的結果,比如訂票系統

      臟讀

      A用戶修改了數據,隨后B用戶又讀出該數據,但A用戶因為某些原因取消了對數據的修改,數據恢復原值,此時B得到的數據就與數據庫內的數據產生了不一致

      不可重復讀

      A用戶讀取數據,隨后B用戶讀出該數據并修改,此時A用戶再讀取數據時發現前后兩次的值不一致

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

      二鎖的分類

      鎖的類別有兩種分法:

      1. 從數據庫系統的角度來看:分為獨占鎖(即排它鎖),共享鎖和更新鎖

      MS-SQL Server 使用以下資源鎖模式。

      鎖模式 描述

      共享 (S) 用于不更改或不更新數據的操作(只讀操作),如 SELECT 語句。

      更新 (U) 用于可更新的資源中。防止當多個會話在讀取、鎖定以及隨后可能進行的資源更新時發生常見形式的死鎖。

      排它 (X) 用于數據修改操作,例如 INSERT、UPDATE 或 DELETE。確保不會同時同一資源進行多重更新。

      意向鎖用于建立鎖的層次結構。意向鎖的類型為:意向共享 (IS)、意向排它 (IX) 以及與意向排它共享 (SIX)。

      架構鎖在執行依賴于表架構的操作時使用。架構鎖的類型為:架構修改 (Sch-M) 和架構穩定性 (Sch-S)。

      大容量更新 (BU) 向表中大容量復制數據并指定了 TABLOCK 提示時使用。

      共享鎖

      共享 (S)鎖允許并發事務讀取 (SELECT) 一個資源。資源上存在共享 (S)鎖時,任何其它事務都不能修改數據。一旦已經讀取數據,便立即釋放資源上的共享 (S)鎖,除非將事務隔離級別設置為可重復讀或更高級別,或者在事務生存周期內用鎖定提示保留共享 (S)鎖。

      更新鎖

      更新 (U)鎖可以防止通常形式的死鎖。一般更新模式由一個事務組成,此事務讀取記錄,獲取資源(頁或行)的共享 (S)鎖,然后修改行,此操作要求鎖轉換為排它 (X)鎖。如果兩個事務獲得了資源上的共享模式鎖,然后試圖同時更新數據,則一個事務嘗試將鎖轉換為排它 (X)鎖。共享模式到排它鎖的轉換必須等待一段時間,因為一個事務的排它鎖與其它事務的共享模式鎖不兼容;發生鎖等待。第二個事務試圖獲取排它 (X)鎖以進行更新。由于兩個事務都要轉換為排它 (X)鎖,并且每個事務都等待另一個事務釋放共享模式鎖,因此發生死鎖。

      若要避免這種潛在的死鎖問題,請使用更新 (U)鎖。一次只有一個事務可以獲得資源的更新 (U)鎖。如果事務修改資源,則更新 (U)鎖轉換為排它 (X)鎖。否則,鎖轉換為共享鎖。

      排它鎖

      排它 (X)鎖可以防止并發事務對資源進行訪問。其它事務不能讀取或修改排它 (X)鎖鎖定的數據。

      意向鎖

      意向鎖表示 SQL Server 需要在層次結構中的某些底層資源上獲取共享 (S)鎖或排它 (X)鎖。例如,放置在表級的共享意向鎖表示事務打算在表中的頁或行上放置共享 (S)鎖。在表級設置意向鎖可防止另一個事務隨后在包含那一頁的表上獲取排它 (X)鎖。意向鎖可以提高性能,因為 SQL Server 僅在表級檢查意向鎖來確定事務是否可以安全地獲取該表上的鎖。而無須檢查表中的每行或每頁上的鎖以確定事務是否可以鎖定整個表。

      意向鎖包括意向共享 (IS)、意向排它 (IX) 以及與意向排它共享 (SIX)。

      鎖模式 描述

      意向共享 (IS) 通過在各資源上放置 S鎖,表明事務的意向是讀取層次結構中的部分(而不是全部)底層資源。

      意向排它 (IX) 通過在各資源上放置 X鎖,表明事務的意向是修改層次結構中的部分(而不是全部)底層資源。IX 是 IS 的超集。

      與意向排它共享 (SIX) 通過在各資源上放置 IX鎖,表明事務的意向是讀取層次結構中的全部底層資源并修改部分(而不是全部)底層資源。允許頂層資源上的并發 IS鎖。例如,表的 SIX鎖在表上放置一個 SIX鎖(允許并發 IS鎖),在當前所修改頁上放置 IX鎖(在已修改行上放置 X鎖)。雖然每個資源在一段時間內只能有一個 SIX鎖,以防止其它事務對資源進行更新,但是其它事務可以通過獲取表級的 IS鎖來讀取層次結構中的底層資源。

      獨占鎖:只允許進行鎖定操作的程序使用,其他任何對他的操作均不會被接受。執行數據更新命令時,SQL Server會自動使用獨占鎖。當對象上有其他鎖存在時,無法對其加獨占鎖。

      共享鎖:共享鎖鎖定的資源可以被其他用戶讀取,但其他用戶無法修改它,在執行Select時,SQL Server會對對象加共享鎖。

      更新鎖:當SQL Server準備更新數據時,它首先對數據對象作更新鎖鎖定,這樣數據將不能被修改,但可以讀取。等到SQL Server確定要進行更新數據操作時,他會自動將更新鎖換為獨占鎖,當對象上有其他鎖存在時,無法對其加更新鎖。

      2. 從程序員的角度看:分為樂觀鎖和悲觀鎖。

      樂觀鎖:完全依靠數據庫來管理鎖的工作。

      悲觀鎖:程序員自己管理數據或對象上的鎖處理。

      MS-SQLSERVER使用鎖在多個同時在數據庫內執行修改的用戶間實現悲觀并發控制

    posted on 2009-09-11 14:52 武漢北大青鳥 閱讀(68) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     

    導航

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章檔案

    默認

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产精品久久久久久亚洲影视| 亚洲一区二区三区在线视频| 亚洲αv久久久噜噜噜噜噜| 美女视频黄频a免费观看| 国内精品免费视频自在线| 精品亚洲国产成人| 亚洲一区二区免费视频| 久久夜色精品国产噜噜亚洲AV| 国产偷伦视频免费观看| 国产亚洲美女精品久久久久狼| 丰满人妻一区二区三区免费视频| 亚洲国产天堂久久综合| 一区二区免费在线观看| 国产亚洲精品成人a v小说| 人人鲁免费播放视频人人香蕉| 久久精品国产亚洲AV不卡| 成人免费av一区二区三区| 亚洲无码在线播放| 日韩免费无码一区二区三区| 久久久亚洲AV波多野结衣| 无码人妻精品中文字幕免费东京热| 亚洲伊人久久大香线焦| 精品国产一区二区三区免费看| 国产AV日韩A∨亚洲AV电影| 亚洲国产综合无码一区二区二三区 | 亚洲AV成人一区二区三区AV| 日本免费xxxx色视频| 亚洲国产成人综合精品| 亚洲爽爽一区二区三区| 久久永久免费人妻精品| 亚洲不卡视频在线观看| 国产v片免费播放| 中文成人久久久久影院免费观看| 久久夜色精品国产噜噜噜亚洲AV| 免费看大黄高清网站视频在线| 一级**爱片免费视频| 亚洲综合激情六月婷婷在线观看| 国产精品视频永久免费播放| 国产亚洲综合精品一区二区三区| 亚洲国产精品无码久久一区二区| 我们的2018在线观看免费高清|