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

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

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

    posts - 262,  comments - 221,  trackbacks - 0

    一、數(shù)據(jù)并發(fā)帶來的各種情況 

    ①臟讀:事務(wù)A讀到事務(wù)B尚未提交的數(shù)據(jù),并基于這個數(shù)據(jù)進行后續(xù)操作

    ②不可重復(fù)讀:事務(wù)A讀取數(shù)據(jù)后,被事務(wù)B修改或刪除,事務(wù)A再次讀取時前后兩次讀取的數(shù)據(jù)不一致

    ③幻像讀:事務(wù)A讀取數(shù)據(jù)后,事務(wù)B新增了數(shù)據(jù),事務(wù)A再次讀取是前后兩次讀取的數(shù)據(jù)不一致


    不可重復(fù)讀和幻想讀的區(qū)別:

    幻象讀和不可重復(fù)讀是兩個容易混淆的概念,前者是指讀到了其它已經(jīng)提交事務(wù)的新增數(shù)據(jù),而后者是指讀到了已經(jīng)提交事務(wù)的更改數(shù)據(jù)(更改或刪除),為了避免這兩種情況,采取的對策是不同的,防止讀取到更改數(shù)據(jù),只需要對操作的數(shù)據(jù)添加行級鎖,阻止操作中的數(shù)據(jù)發(fā)生變化,而防止讀取到新增數(shù)據(jù),則往往需要添加表級鎖——將整個表鎖定,防止新增數(shù)據(jù)(Oracle使用多版本數(shù)據(jù)的方式實現(xiàn))。

    ④第一類更新丟失:事務(wù)A和事務(wù)B同時訪問同一個數(shù)據(jù),事務(wù)B先提交修改,事務(wù)A回滾操作。導(dǎo)致事務(wù)B的修改丟失

    ⑤第二類更新丟失:事務(wù)A和事務(wù)B同時訪問同一個數(shù)據(jù),事務(wù)B先提交修改,事務(wù)A再提交。導(dǎo)致事務(wù)B的修改被覆蓋

    第一類更新丟失是很嚴重的操作,如果控制不當,可能導(dǎo)致在一個長時間的大型事務(wù)中,所有的操作都被回滾。所以所有的數(shù)據(jù)庫都不支持這種并發(fā)情況。

    二、數(shù)據(jù)庫的鎖機制

    從鎖的作用范圍來分,可以分為:行級鎖和表級鎖
    從鎖的排他性來分,可以分為:共享鎖和獨占鎖(排他鎖),
    其中共享鎖允許共享,但阻止獨占鎖。獨占鎖不但不允許共享鎖,且不允許其它獨占鎖


    于是組合起來就有:

    ①行共享鎖:允許多個會話共享鎖定的行數(shù)據(jù),但不允許對這些行的獨占鎖。例如select ...for update

    ②行獨占鎖:對行進行獨占,不允許其它的共享鎖(表,行)、獨占鎖(表,行)和表共享行獨占鎖。例如insert,update

    ③表共享鎖:允許多個會話共享表數(shù)據(jù),但不允許其它的獨占鎖(表,行)、表共享行獨占鎖。可以實現(xiàn)表級事務(wù)一致性

    ④表獨占鎖:對表進行獨占,不允許其它的共享鎖(表,行)、讀占鎖(表,行)和表共享行獨占鎖。達到序列化操作級別

    ⑤表共享行獨占鎖:允許多個會話共享表數(shù)據(jù),但同一時刻只能有一個行獨占鎖。可以達到數(shù)據(jù)共享同時防止臟讀、不可重復(fù)讀、幻像讀

    表共享鎖定可以讓會話具有對表事務(wù)級一致性訪問,因為其它會話在你提交或者回溯該事務(wù)并釋放對該表的鎖定之前不能更改這個被鎖定的表(因為要修改表的記錄,就必須獲得行獨占鎖,但是共享鎖會阻止獨占鎖的獲取,這樣原來其它正在讀取表記錄的事務(wù)就不會出現(xiàn)臟讀、不可重復(fù)讀、幻像讀的情況了);

    表共享行獨占鎖與其不同則是多了一個行獨占,這樣效率更高。

    三、事務(wù)隔離級別

    盡管數(shù)據(jù)庫為用戶提供了鎖的DML操作方式,但直接使用鎖管理是非常麻煩的,因此數(shù)據(jù)庫為用戶提供了自動鎖機制。只要用戶指定會話的事務(wù)隔離級別,數(shù)據(jù)庫就會分析事務(wù)中的SQL語句,然后自動為事務(wù)操作的數(shù)據(jù)資源添加上適合的鎖。此外數(shù)據(jù)庫還會維護這些鎖,當一個資源上的鎖數(shù)目太多時,自動進行鎖升級以提高系統(tǒng)的運行性能,而這一過程對用戶來說完全是透明的

    下面是ANSI ISO92定義的4個事務(wù)隔離級別以及對應(yīng)的對數(shù)據(jù)并發(fā)的處理

    圖片

    READ COMMITITED:不允許讀取未提交的數(shù)據(jù),但可以讀取已提交的數(shù)據(jù)。所以可能出現(xiàn)不可重復(fù)讀、和幻像讀(讀的過程依然可以被修改、增加、刪除)

     
    REPEATABLE READ:通過行鎖定,在讀的數(shù)據(jù)不允許其它進程修改。確保已讀取的數(shù)據(jù)不被修改、刪除(不可重復(fù)讀)但無法阻止其它進程寫入新數(shù)據(jù),所以不能確保讀取到新的數(shù)據(jù)(幻像讀)
     
    SERIALIZABLE:通過表鎖定,徹底禁止讀取期間其它進程的修改、刪除(屏蔽不可重復(fù)讀)和增加(屏蔽幻像讀)
     
    但是不管是那種隔離級別,對第一類丟失更新都是不能接收的 


    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2010-03-15 11:04 Paul Lin 閱讀(1078) 評論(0)  編輯  收藏 所屬分類: J2EE 框架
    <2010年3月>
    28123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本道免费精品一区二区| 免费很黄很色裸乳在线观看| 亚洲国产人成网站在线电影动漫| 日韩大片免费观看视频播放| 午夜爱爱免费视频| 亚洲1区1区3区4区产品乱码芒果| 免费人成网站在线观看不卡| 国产亚洲美女精品久久久| 精品一区二区三区无码免费直播| 免费无码精品黄AV电影| 亚洲国产精品综合久久网各| 无码中文字幕av免费放dvd| 亚洲精品午夜无码专区| 亚洲第一视频网站| 中文在线免费看视频| 狠狠色婷婷狠狠狠亚洲综合| 大片免费观看92在线视频线视频| 免费看国产曰批40分钟| 亚洲av无码偷拍在线观看| 好男人看视频免费2019中文| 中中文字幕亚洲无线码| AV大片在线无码永久免费| 亚洲校园春色小说| 亚洲毛片免费观看| 亚洲图片校园春色| 在线看片v免费观看视频777 | 亚洲国产综合91精品麻豆| 免费国产午夜高清在线视频| 亚洲成A人片在线观看无码不卡| 日韩a级无码免费视频| 亚洲成av人在线视| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 激情吃奶吻胸免费视频xxxx| 又粗又硬免费毛片| 草久免费在线观看网站| 亚洲日韩VA无码中文字幕| 亚洲高清免费视频| 亚洲精品国产精品乱码在线观看 | 亚洲美女视频网站| 黄页网站免费观看| 亚洲综合色一区二区三区|