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

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

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

    爪哇咖啡館

    我為J狂

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      11 隨筆 :: 2 文章 :: 39 評論 :: 0 Trackbacks
    臟讀 dirty   reads:當事務讀取還未被提交的數據時,就會發生這種事件。舉例來說:Transaction   1   修改了一行數據,然后   Transaction   2   在   Transaction   1   還未提交修改操作之前讀取了被修改的行。如果   Transaction   1   回滾了修改操作,那么   Transaction   2   讀取的數據就可以看作是從未存在過的。     
      不可重復的讀 non-repeatable   reads:當事務兩次讀取同一行數據,但每次得到的數據都不一樣時,就會發生這種事件。舉例來說:Transaction   1   讀取一行數據,然后   Transaction   2   修改或刪除該行并提交修改操作。當   Transaction   1   試圖重新讀取該行時,它就會得到不同的數據值(如果該行被更新)或發現該行不再存在(如果該行被刪除)。     
      虛讀 phantom   read:如果符合搜索條件的一行數據在后面的讀取操作中出現,但該行數據卻不屬于最初的數據,就會發生這種事件。舉例來說:Transaction   1   讀取滿足某種搜索條件的一些行,然后   Transaction   2   插入了符合   Transaction   1   的搜索條件的一個新行。如果   Transaction   1   重新執行產生原來那些行的查詢,就會得到不同的行。


    事務場景是這樣的:
    對于同一個銀行帳戶A內有200元,甲進行提款操作100元,乙進行轉帳操作100元到B帳戶。如果事務沒有進行隔離可能會并發如下問題:
    1、第一類丟失更新:首先甲提款時帳戶內有200元,同時乙轉帳也是200元,然后甲乙同時操作,甲操作成功取走100元,乙操作失敗回滾,帳戶內最終為200元,這樣甲的操作被覆蓋掉了,銀行損失100元。
    2、臟讀:甲取款100元未提交,乙進行轉帳查到帳戶內剩有100元,這是甲放棄操作回滾,乙正常操作提交,帳戶內最終為0元,乙讀取了甲的臟數據,客戶損失100元。
    3、虛讀:和臟讀類似,是針對于插入操作過程中的讀取問題,如丙存款100元未提交,這時銀行做報表進行統計查詢帳戶為200元,然后丙提交了,這時銀行再統計發現帳戶為300元了,無法判斷到底以哪個為準?
     大家好像覺得統計這個東西肯定是時時更新的,這種情況很正常;但是如果統計是在一個事務中的時候就不正常了,比如我們的一個統計應用需要將統計結果分別輸出到電腦屏幕和遠程網絡某臺計算機的磁盤文件中,為了
     提高性能和用戶響應我們分成2個線程,這時先完成的和后完成的統計數據就可能不一致,我們就不知道以哪個為準了。
    4、不可重復讀:甲乙同時開始都查到帳戶內為200元,甲先開始取款100元提交,這時乙在準備最后更新的時候又進行了一次查詢,發現結果是100元,這時乙就會很困惑,不知道該將帳戶改為100還是0。
    和臟讀的區別是,臟讀是讀取前一事務未提交的臟數據,不可重復讀是重新讀取了前一事務已提交的數據。
    5、第二類丟失更新:是不可重復讀的一種特例,如上,乙不做第二次查詢而是直接操作完成,帳戶內最終為100元,甲的操作被覆蓋掉了,銀行損失100元。感覺和第一類丟失更新類似。


    在多個事務并發做數據庫操作的時候,如果沒有有效的避免機制,就會出現種種問題。大體上有三種問題,歸結如下:
    1、丟失更新
    如果兩個事務都要更新數據庫一個字段X,x=100
    事務A             事務B
    讀取X=100    
                      讀取X=100
    寫入x=X+100
                      寫入x=X+200
    事務結束x=200
                      事務結束x=300
    最后x==300
    這種情況事務A的更新就被覆蓋掉了、丟失了。
    丟失更新說明事務進行數據庫寫操作的時候可能會出現的問題。
    2、不可重復讀
    一個事務在自己沒有更新數據庫數據的情況,同一個查詢操作執行兩次或多次的結果應該是一致的;如果不一致,就說明為不可重復讀。
    還是用上面的例子
    事務A             事務B
    讀取X=100    
                      讀取X=100
    讀取X=100    
                      寫入x=X+100
    讀取X=200    
    事務結束x=200
                      事務結束x=200
    這種情況事務A多次讀取x的結果出現了不一致,即為不可重復讀。
    再有一情況就是幻影
    事務A讀的時候讀出了15條記錄,事務B在事務A執行的過程中刪除(增加)了1條,事務A再讀的時候就變成了14(16)條,這種情況就叫做幻影讀。
    不可重復讀說明了做數據庫讀操作的時候可能會出現的問題。
    3、臟讀(未提交讀)
    防止一個事務讀到另一個事務還沒有提交的記錄。
    如:
    事務A             事務B
                      讀取X=100
                      寫入x=X+100
    讀取X=200    
                      事務回滾x=100
    讀取X=100    
    事務結束x=100

    x鎖 排他鎖 被加鎖的對象只能被持有鎖的事務讀取和修改,其他事務無法在該對象上加其他鎖,也不能讀取和修改該對象
    s鎖 共享鎖 被加鎖的對象可以被持鎖事務讀取,但是不能被修改,其他事務也可以在上面再加s鎖。
    封鎖協議:
    一級封鎖協議:
    在事務修改數據的時候加x鎖,直到事務結束(提交或者回滾)釋放x鎖。一級封鎖協議可以有效的防止丟失更新,但是不能防止臟讀不可重復讀的出現。
    二級封鎖協議:
    在一級封鎖的基礎上事務讀數據的時候加s鎖,讀取之后釋放。二級封鎖協議可以防止丟失更新,臟讀。不能防止不可重復讀。
    三級封鎖協議:
    在一級封鎖的基礎上事務讀數據的時候加s鎖,直到事務結束釋放。二級封鎖協議可以防止丟失更新,臟讀,不可重復讀。

    posted on 2007-04-23 20:07 哲藤峰子 閱讀(5583) 評論(8)  編輯  收藏

    評論

    # re: 多角度徹底理解數據庫事務中的"臟讀"."不可重復的讀"及"虛讀" 2007-09-23 18:07 qtnez
    非常感謝,讀了清楚多了  回復  更多評論
      

    # re: 多角度徹底理解數據庫事務中的"臟讀"."不可重復的讀"及"虛讀" 2007-10-13 16:02 yliang22
    對于同一個銀行帳戶A內有200元,甲進行提款操作100元,乙進行轉帳操作100元到B帳戶。如果事務沒有進行隔離可能會并發如下問題:
    如果事務沒有進行隔離可能會并發如下問題:這句話是有問題的。事務的隔離級別不同會發生下面的問題。  回復  更多評論
      

    # re: 多角度徹底理解數據庫事務中的"臟讀"."不可重復的讀"及"虛讀" 2008-02-22 15:03 bizairshop
    寫的很好 http://www.newskyair.com 機票推薦  回復  更多評論
      

    # re: 多角度徹底理解數據庫事務中的"臟讀"."不可重復的讀"及"虛讀"[未登錄] 2008-04-20 10:10 ggg
    dhjdshakHDFSAKJDHSA
      回復  更多評論
      

    # re: 多角度徹底理解數據庫事務中的"臟讀"."不可重復的讀"及"虛讀"[未登錄] 2008-04-20 10:11 ggg
    從表面和純理論方法分析了,沒有結果到實際的應用來分析。  回復  更多評論
      

    # re: 多角度徹底理解數據庫事務中的"臟讀"."不可重復的讀"及"虛讀" 2013-03-01 15:29 未來城市
    很好,很強大  回復  更多評論
      

    # re: 多角度徹底理解數據庫事務中的"臟讀"."不可重復的讀"及"虛讀" 2013-03-01 15:37 未來城市
    寫的真好  回復  更多評論
      

    # re: 多角度徹底理解數據庫事務中的"臟讀"."不可重復的讀"及"虛讀"[未登錄] 2014-02-13 11:34 kurt
    "在一級封鎖的基礎上事務讀數據的時候加s鎖,"既然加了X鎖其它事物連read都不成,為何還要加S鎖呢?  回復  更多評論
      


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


    網站導航:
     
    主站蜘蛛池模板: 国产精品亚洲自在线播放页码| 亚洲乱码在线卡一卡二卡新区| 久久精品国产亚洲AV麻豆不卡 | 久久久久久AV无码免费网站| 97在线观免费视频观看| 亚洲中文字幕无码专区| 亚洲成av人片不卡无码| 精品国产呦系列在线观看免费| 成人女人A级毛片免费软件| 亚洲人成免费电影| 中文字幕在线视频免费| 四虎永久在线观看免费网站网址| 亚洲午夜AV无码专区在线播放 | 亚洲AV乱码久久精品蜜桃| 亚洲AV无码成人精品区日韩| 99re热精品视频国产免费| 国产91久久久久久久免费| 亚洲gv猛男gv无码男同短文| 午夜不卡久久精品无码免费 | 中日韩亚洲人成无码网站| 免费鲁丝片一级观看| 亚洲经典在线中文字幕| 中国一级特黄的片子免费 | 亚洲色无码国产精品网站可下载| 两性色午夜视频免费播放| 久久久综合亚洲色一区二区三区| 99精品视频在线观看免费专区| 亚洲一区二区三区在线观看蜜桃| 久久精品乱子伦免费| 亚洲综合无码AV一区二区 | 久久国产精品亚洲综合| 黄页网站免费观看| 曰批全过程免费视频观看免费软件| 久久精品女人天堂AV免费观看| 亚洲日本在线播放| 日本人护士免费xxxx视频| 性色av极品无码专区亚洲| 亚洲精品卡2卡3卡4卡5卡区| 久久精品免费大片国产大片| 亚洲精品一卡2卡3卡三卡四卡| 国产一级大片免费看|