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

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

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

    agapple

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      13 Posts :: 1 Stories :: 1 Comments :: 0 Trackbacks
     

    事務(wù)的四個(gè)屬性:原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)。

    1.原子性(Atomic)
        最重要的原則,也是最容易理解的原則。被事務(wù)管理的所有方法,要么一起被提交,要么一起回滾。

    2.一致性(Consistency)
        事務(wù)在系統(tǒng)完整性中實(shí)施一致性,如果事務(wù)成功地完成,那么系統(tǒng)中所有變化將正確地應(yīng)用,系統(tǒng)處于新有效狀態(tài)。如果在事務(wù)中出現(xiàn)錯(cuò)誤,那么系統(tǒng)中的所有變化將自動(dòng)地回滾,系統(tǒng)返回到原始狀態(tài)。

    3.隔離性(Isolation)
        在隔離狀態(tài)執(zhí)行事務(wù),使它們好像是系統(tǒng)在給定時(shí)間內(nèi)執(zhí)行的唯一操作。如果有兩個(gè)事務(wù),運(yùn)行在相同的時(shí)間內(nèi),執(zhí)行相同的功能,事務(wù)的隔離性將確保每一事務(wù)在系統(tǒng)中認(rèn)為只有該事務(wù)在使用系統(tǒng)。這種屬性有時(shí)稱為串行化,為了防止事務(wù)操作間的混淆,必須串行化或序列化請求,使得在同一時(shí)間僅有一個(gè)請求用于同一數(shù)據(jù)。重要的是,在隔離狀態(tài)執(zhí)行事務(wù),系統(tǒng)的狀態(tài)有可能是不一致的,在結(jié)束事務(wù)前,應(yīng)確保系統(tǒng)處于一致狀態(tài)。但是在每個(gè)單獨(dú)的事務(wù)中,系統(tǒng)的狀態(tài)可能會(huì)發(fā)生變化。如果事務(wù)不是在隔離狀態(tài)運(yùn)行,它就可能從系統(tǒng)中訪問數(shù)據(jù),而系統(tǒng)可能處于不一致狀態(tài)。通過提供事務(wù)隔離,可以阻止這類事件的發(fā)生。

    4.持久性(Durability)
        持久性意味著一旦事務(wù)執(zhí)行成功,在系統(tǒng)中產(chǎn)生的所有變化將是永久的。應(yīng)該存在一些檢查點(diǎn)防止在系統(tǒng)失敗時(shí)丟失信息。甚至硬件本身失敗,系統(tǒng)的狀態(tài)仍能通過在日志中記錄事務(wù)完成的任務(wù)進(jìn)行重建。

    數(shù)據(jù)庫鎖概念:
        
    在數(shù)據(jù)庫中有兩種基本的鎖類型:排它鎖(Exclusive Locks,即X鎖)和共享鎖(Share Locks,即S鎖)。當(dāng)數(shù)據(jù)對象被加上排它鎖時(shí),其他的事務(wù)不能對它讀取和修改。加了共享鎖的數(shù)據(jù)對象可以被其他事務(wù)讀取,但不能修改。數(shù)據(jù)庫利用這兩種基本的鎖類型來對數(shù)據(jù)庫的事務(wù)進(jìn)行并發(fā)控制。
        從程序員的角度看,鎖分為以下兩種類型: 
        1.樂觀鎖(Optimistic Lock) 
        樂觀鎖假定在處理數(shù)據(jù)時(shí),不需要在應(yīng)用程序的代碼中做任何事情就可以直接在記錄上加鎖、即完全依靠數(shù)據(jù)庫來管理鎖的工作。一般情況下,當(dāng)執(zhí)行事務(wù)處理時(shí)SQL Server會(huì)自動(dòng)對事務(wù)處理范圍內(nèi)更新到的表做鎖定。 
        2.悲觀鎖(Pessimistic Lock) 
        悲觀鎖對數(shù)據(jù)庫系統(tǒng)的自動(dòng)管理不感冒,需要程序員直接管理數(shù)據(jù)或?qū)ο笊系募渔i處理,并負(fù)責(zé)獲取、共享和放棄正在使用的數(shù)據(jù)上的任何鎖。

    事務(wù)隔離級別
        
    一個(gè)事務(wù)必須與其它事務(wù)進(jìn)行隔離的程度。較低的隔離級別可以增加并發(fā),但代價(jià)是降低數(shù)據(jù)的正確性。相反,較高的隔離級別可以確保數(shù)據(jù)的正確性,但可能對并發(fā)產(chǎn)生負(fù)面影響。

    數(shù)據(jù)庫并發(fā)操作存在的異常情況:
    1. 更新丟失(Lost update):兩個(gè)事務(wù)都同時(shí)更新一行數(shù)據(jù)但是第二個(gè)事務(wù)卻中途失敗退出導(dǎo)致對數(shù)據(jù)兩個(gè)修改都失效了這是系統(tǒng)沒有執(zhí)行任何鎖操作因此并發(fā)事務(wù)并沒有被隔離開來

    2. 臟讀取(Dirty Reads):一個(gè)事務(wù)開始讀取了某行數(shù)據(jù)但是另外一個(gè)事務(wù)已經(jīng)更新了此數(shù)據(jù)但沒有能夠及時(shí)提交。這是相當(dāng)危險(xiǎn)很可能所有操作都被回滾

    3. 不可重復(fù)讀取(Non-repeatable Reads):一個(gè)事務(wù)對同一行數(shù)據(jù)重復(fù)讀取兩次但是卻得到了不同結(jié)果。例如在兩次讀取中途有另外一個(gè)事務(wù)對該行數(shù)據(jù)進(jìn)行了修改并提交

    4. 兩次更新問題(Second lost updates problem):無法重復(fù)讀取特例,有兩個(gè)并發(fā)事務(wù)同時(shí)讀取同一行數(shù)據(jù)然后其中一個(gè)對它進(jìn)行修改提交而另一個(gè)也進(jìn)行了修改提交這就會(huì)造成第一次寫操作失效

    5. 幻讀(Phantom Reads):也稱為幻像(幻影)。事務(wù)在操作過程中進(jìn)行兩次查詢,第二次查詢結(jié)果包含了第一次查詢中未出現(xiàn)的數(shù)據(jù)(這里并不要求兩次查詢SQL語句相同)這是因?yàn)樵趦纱尾樵冞^程中有另外一個(gè)事務(wù)插入數(shù)據(jù)造成的

    為了避免上面出現(xiàn)幾種情況在標(biāo)準(zhǔn)SQL規(guī)范中定義了4個(gè)事務(wù)隔離級別,不同隔離級別對事務(wù)處理不同 。

    1.未授權(quán)讀取(Read Uncommitted):也稱未提交讀。允許臟讀取但不允許更新丟失,如果一個(gè)事務(wù)已經(jīng)開始寫數(shù)據(jù)則另外一個(gè)數(shù)據(jù)則不允許同時(shí)進(jìn)行寫操作但允許其他事務(wù)讀此行數(shù)據(jù)。該隔離級別可以通過“排他寫鎖”實(shí)現(xiàn)。事務(wù)隔離的最低級別,僅可保證不讀取物理損壞的數(shù)據(jù)。與READ COMMITTED 隔離級相反,它允許讀取已經(jīng)被其它用戶修改但尚未提交確定的數(shù)據(jù)。

    2. 授權(quán)讀取(Read Committed):也稱提交讀。允許不可重復(fù)讀取但不允許臟讀取。這可以通過“瞬間共享讀鎖”和“排他寫鎖”實(shí)現(xiàn),讀取數(shù)據(jù)的事務(wù)允許其他事務(wù)繼續(xù)訪問該行數(shù)據(jù),但是未提交寫事務(wù)將會(huì)禁止其他事務(wù)訪問該行。SQL Server 默認(rèn)的級別。在此隔離級下,SELECT 命令不會(huì)返回尚未提交(Committed) 的數(shù)據(jù),也不能返回臟數(shù)據(jù)。

    3. 可重復(fù)讀取(Repeatable Read):禁止不可重復(fù)讀取和臟讀取。但是有時(shí)可能出現(xiàn)幻影數(shù)據(jù),這可以通過“共享讀鎖”和“排他寫鎖”實(shí)現(xiàn),讀取數(shù)據(jù)事務(wù)將會(huì)禁止寫事務(wù)(但允許讀事務(wù)),寫事務(wù)則禁止任何其他事務(wù)。在此隔離級下,用SELECT 命令讀取的數(shù)據(jù)在整個(gè)命令執(zhí)行過程中不會(huì)被更改。此選項(xiàng)會(huì)影響系統(tǒng)的效能,非必要情況最好不用此隔離級。

    4. 串行(Serializable):也稱可串行讀。提供嚴(yán)格的事務(wù)隔離,它要求事務(wù)序列化執(zhí)行,事務(wù)只能一個(gè)接著一個(gè)地執(zhí)行,但不能并發(fā)執(zhí)行。如果僅僅通過“行級鎖”是無法實(shí)現(xiàn)事務(wù)序列化的,必須通過其他機(jī)制保證新插入的數(shù)據(jù)不會(huì)被剛執(zhí)行查詢操作事務(wù)訪問到。事務(wù)隔離的最高級別,事務(wù)之間完全隔離。如果事務(wù)在可串行讀隔離級別上運(yùn)行,則可以保證任何并發(fā)重疊事務(wù)均是串行的。


    隔離級別 更新丟失 臟讀取 重復(fù)讀取 幻讀
    未授權(quán)讀取 N Y Y Y
    授權(quán)讀取 N N Y Y
    可重復(fù)讀取 N N N Y
    串行 N N N N



    Blog : http://agapple.javaeye.com/  歡迎訪問
    posted on 2009-02-15 21:47 agapple 閱讀(6396) 評論(1)  編輯  收藏 所屬分類: 雜類

    Feedback

    # re: 事務(wù)隔離級別小記 2010-08-19 14:55 人字拖
    good  回復(fù)  更多評論
      


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 一级女性全黄久久生活片免费 | 日韩精品一区二区亚洲AV观看| 国产一区二区三区亚洲综合| 成人av免费电影| 亚洲а∨天堂久久精品9966 | 本道天堂成在人线av无码免费| 国产免费久久精品| 美女露100%胸无遮挡免费观看| 免费在线看片网站| 一级视频免费观看| 国产AV无码专区亚洲AV漫画| a级毛片免费在线观看| 亚洲av日韩av天堂影片精品| 日韩中文字幕免费视频| 亚洲欧洲日韩综合| 在线观看视频免费国语| 免费精品国产自产拍在线观看| 亚洲免费在线观看| 国产拍拍拍无码视频免费| 亚洲免费视频在线观看| 四虎在线最新永久免费| 成人亚洲国产va天堂| 亚洲国产成人VA在线观看| baoyu122.永久免费视频| 久久亚洲AV成人无码国产| 成人无码区免费A片视频WWW| 精品久久亚洲一级α| 亚洲av综合avav中文| 搡女人免费视频大全| 一级做性色a爰片久久毛片免费| 亚洲av无码潮喷在线观看| 99在线视频免费观看视频| 精品无码专区亚洲| 亚洲AV无码一区二区三区系列 | 无码A级毛片免费视频内谢| 亚洲一欧洲中文字幕在线| 无码欧精品亚洲日韩一区夜夜嗨| 最近中文字幕大全免费版在线| 久久精品国产亚洲AV蜜臀色欲| 亚洲国产成人久久精品99| 日韩免费无码视频一区二区三区 |