qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          游標、事務并發和鎖三者之間的那點事

          http://www.51testing.com/html/73/n-821673.html

            對數據庫學習的不斷深入,對游標的認識也在逐漸加深,游標與事務、鎖有著密不可分的關系。 無論是事務、鎖還是游標相對于數據庫來說最主要目的是保證數據的完整性。對事務并發、鎖定的深入學習才能更加完善對游標的理解。少說廢話,下面進入本篇文章的正題。

            首先,我們講解游標與事務并發的那點事

            事務是為完成特定任務,將一條或多條的SQL語句組合在一起。有效的使用事務不但可以提高數據的安全性,而且還可以增強數據的處理效率。如果沒有鎖定且多個用戶同時訪一個數據庫,多個事務使用相同的數據時就會出現事務并發的問題。

            我們一張圖講解事務并發的四個方面:

            從上圖我們可以看出來,事務并發的四個方面,歸根結底都有相似的地方:多個事務修改同一行數據,發生錯誤。

            對比著學習游標的并發問題,游標的并發與事務的并發基本相同:多個游標修改同一行數據,發生錯誤。

            同樣,我們還是一張圖分析游標的四個并發選項:

            其次,我們講解鎖和事務并發的那點事

            所謂鎖即是保證數據安全、數據庫的完整性和一致性,例如:每家的門鎖,因此,鎖可以防止事務的并發問題。我們看一下鎖的類型:

            為了防止數據的并發性,可以使用鎖的粒度即鎖的級別,鎖定不同類型的資源。




            死鎖又是怎么產生的呢?

            書上的概念:當兩個或多個線程之間有循環相關性時,將會產生死鎖。其實簡單的說就是:當兩個或多個事務需要同時使用一組有沖突的鎖,而不能將事務繼續下去,就會出現死鎖。

            例如:有兩個事務:事務1、事務2。事務1具有Supplier表的排它鎖,事務2具有Part表上的排它鎖。事務1需要Part表上的鎖,無法獲得。事務2需要Supplier表上的鎖,也無法獲得,這樣就會出現死鎖。只要一方首先釋放持有的鎖,就不會出現死鎖。

            如圖:

            最后,我們講解游標和鎖的那點事

            游標適用于任何其他SELECT語句的相同事務鎖定規則。通過任何SELECT語句獲得的事物鎖由下述兩項控制:

            ● 連接的事物隔離級別設置

            ● FROM子句中指定的任何鎖提示

            對于游標和獨立的SELECT語句,這些鎖都會保持到當前事務結束。

            注:SQL  Server以顯性或隱性事務運行,則這些鎖將保持到事務提交或回滾

            舉兩個例子,其所作的鎖定基本相同。如下:

          /* Example 1 */
          SET TRANSACTION ISOLATION LEVEL REPEATABLE READ —設置隔離級別為可重復讀
          GO
          BEGIN TRANSACTION
          GO
          SELECT * FROM AdventureWorks2008R2.Sales.Store;
          GO

          /* Example 2 */
          SET TRANSACTION ISOLATION LEVEL REPEATABLE READ  —設置隔離級別為可重復讀


          GO
          BEGIN TRANSACTION
          GO
          DECLARE abc CURSOR STATIC FOR
          SELECT * FROM AdventureWorks2008R2.Sales.Store;
          GO
          OPEN abc
          GO

            游標、事務并發和鎖三者之間的關系,就分析這么多,希望對大家有所幫助。同樣,希望大家對菜鳥提出寶貴的意見。


           

          posted on 2012-08-17 10:19 順其自然EVO 閱讀(266) 評論(0)  編輯  收藏 所屬分類: 數據庫

          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 左云县| 涞水县| 大埔区| 永定县| 繁峙县| 西藏| 赫章县| 高安市| 安阳市| 乐东| 喜德县| 陈巴尔虎旗| 隆林| 柳州市| 惠水县| 金门县| 永州市| 定西市| 霍州市| 巴楚县| 乡宁县| 开鲁县| 孙吴县| 邯郸市| 黄骅市| 乐都县| 冷水江市| 新龙县| 永康市| 峨边| 永仁县| 乾安县| 琼中| 监利县| 卢湾区| 康保县| 逊克县| 邵阳市| 昂仁县| 和硕县| 河南省|