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

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

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

    數(shù)據(jù)庫(kù)事務(wù)簡(jiǎn)介

    事務(wù)就是一系列的操作,這些操作完成一項(xiàng)任務(wù).只要這些操作里有一個(gè)操作沒(méi)有成功,事務(wù)就操作失敗,發(fā)生回滾事件.即撤消前面的操作,這樣可以保證數(shù)據(jù)的一致性.而且可以把操作暫時(shí)放在緩存里,等所有操作都成功有提交數(shù)據(jù)庫(kù),這樣保證費(fèi)時(shí)的操作都是有效操作.
    如果沒(méi)有特殊聲明,事務(wù)就是指數(shù)據(jù)庫(kù)事務(wù)簡(jiǎn)單的講就是對(duì)數(shù)據(jù)庫(kù)表的添加、刪除、修改和查詢操作。
    從編程的角度來(lái)說(shuō)事務(wù)可由程序員來(lái)設(shè)置,(何時(shí)開(kāi)啟,何時(shí)提交,何時(shí)回滾)如果沒(méi)有設(shè)置則按數(shù)據(jù)庫(kù)默認(rèn)自動(dòng)劃分事務(wù)。而事務(wù)最終在數(shù)據(jù)庫(kù)上執(zhí)行.所以要求數(shù)據(jù)庫(kù)支持事務(wù)。

    事務(wù)具有四個(gè)特征:原子性( Atomicity )、一致性( Consistency )、隔離性( Isolation )和持續(xù)性( Durability )。這四個(gè)特性簡(jiǎn)稱為 ACID 特性。
    1 、原子性
        事務(wù)是數(shù)據(jù)庫(kù)的邏輯工作單位,事務(wù)中包含的各操作要么都做,要么都不做
    2 、一致性 
        事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。因此當(dāng)數(shù)據(jù)庫(kù)只包含成功事務(wù)提交的結(jié)果時(shí),就說(shuō)數(shù)據(jù)庫(kù)處于一致性狀態(tài)。如果數(shù)據(jù)庫(kù)系統(tǒng) 運(yùn)行中發(fā)生故障,有些事務(wù)尚未完成就被迫中斷,這些未完成事務(wù)對(duì)數(shù)據(jù)庫(kù)所做的修改有一部分已寫入物理數(shù)據(jù)庫(kù),這時(shí)數(shù)據(jù)庫(kù)就處于一種不正確的狀態(tài),或者說(shuō)是 不一致的狀態(tài)。 
    3 、隔離性
        一個(gè)事務(wù)的執(zhí)行不能其它事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)其它并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾。
    4 、持續(xù)性
       也稱永久性,指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來(lái)的其它操作或故障不應(yīng)該對(duì)其執(zhí)行結(jié)果有任何影響。
      
    數(shù)據(jù)庫(kù)系統(tǒng)是允許多個(gè)用戶共享數(shù)據(jù)庫(kù)資源,尤其是多個(gè)用戶可以同時(shí)存取相同數(shù)據(jù)。(多用戶同時(shí)對(duì)一個(gè)表操作也就是并發(fā))
    我們主觀上雖不想這么做,可是這種情況是存在的,沒(méi)有原因。而并發(fā)會(huì)破壞事務(wù)ACID特性 (隔離性,一致性)。

    并發(fā)會(huì)帶來(lái)下列問(wèn)題:
     臟讀:一個(gè)事務(wù)讀取了未提交的事務(wù)
     不可重復(fù)讀:同一個(gè)事務(wù)中多次讀取同一個(gè)數(shù)據(jù)返回的結(jié)果不同
     幻讀:一個(gè)事務(wù)讀取到了另一個(gè)事務(wù)已提交的insert數(shù)據(jù)。
     
    如果應(yīng)用程序使用完全隔離的事務(wù),那么同時(shí)執(zhí)行多個(gè)事務(wù)的效果將與串行執(zhí)行(一個(gè)接一個(gè)的順序執(zhí)行)完全等效。為解決事務(wù)之間的并發(fā)帶來(lái)的個(gè)問(wèn)題,必須在事務(wù)之間建立隔離關(guān)系(使用隔離級(jí)別)。

    事務(wù)的隔離級(jí)別:就是對(duì)事務(wù)并發(fā)控制的等級(jí),ANSI/ISO SQL將其分為串行化(SERIALIZABLE)、可重復(fù)讀(REPEATABLE READ)、讀已提交(READ COMMITED)、讀未提交(READ UNCOMMITED)四個(gè)等級(jí)
        1 Serializable:最嚴(yán)格的級(jí)別,事務(wù)串行執(zhí)行,資源消耗最大;
        2 REPEATABLE READ:讀取數(shù)據(jù)的事務(wù)允許其他事務(wù)繼續(xù)訪問(wèn)該行數(shù)據(jù),但是未提交的寫事務(wù)將會(huì)禁止其他事務(wù)訪問(wèn)該行。避免了“臟讀取”和“不可重復(fù)讀取”的情況,但是帶來(lái)了更多的性能損失。
        3 READ COMMITTED:大多數(shù)主流數(shù)據(jù)庫(kù)的默認(rèn)事務(wù)等級(jí),保證了一個(gè)事務(wù)不會(huì)讀到另一個(gè)并行事務(wù)已修改但未提交的數(shù)據(jù),避免了“臟讀取”。該級(jí)別適用于大多數(shù)系統(tǒng)。
        4 Read Uncommitted:最低的事務(wù)隔離級(jí)別,保證了讀取過(guò)程中不會(huì)讀取到非法數(shù)據(jù)。

         隔離級(jí)別     臟讀        不可重復(fù)讀     幻讀
         Serializable     不會(huì)             不會(huì)     不會(huì)
         REPEATABLE READ     不會(huì)             不會(huì)       會(huì)
         READ COMMITTED     不會(huì)               會(huì)       會(huì)
         Read Uncommitted       會(huì)               會(huì)       會(huì)
      
    數(shù)據(jù)庫(kù)采用鎖機(jī)制來(lái)實(shí)現(xiàn)事務(wù)的隔離性。

     共享鎖:共享鎖用于讀取數(shù)據(jù)操作,它允許其他事務(wù)同時(shí)讀取某鎖定的資源,但不允許其他事務(wù)更新它。
     排他鎖:排它鎖用于修改數(shù)據(jù)的場(chǎng)合。它鎖定的資源,其他事務(wù)不能讀取也不能修改。
     更新鎖:更新鎖在更新操作的初始化階段用來(lái)鎖定可能要被修改的資源,從而避免使用共享鎖造成的死鎖現(xiàn)象

    常見(jiàn)的并發(fā)控制鎖

    http://hahalzb.blogbus.com/logs/19150842.html   心晴怡然

    引用:


    樂(lè)觀鎖

    處理并發(fā)更新的一種方式是使用樂(lè)觀鎖(optimistic locking)。樂(lè)觀鎖的工作原理是讓應(yīng)用程序檢查它即將更新的數(shù)據(jù)是否已被另一個(gè)事務(wù)修改(自該數(shù)據(jù)上次讀取以來(lái))。實(shí)現(xiàn)樂(lè)觀鎖的一種常見(jiàn)做法是在每個(gè)表里添加一個(gè)版本字段,每次應(yīng)用程序更新數(shù)據(jù)表記錄時(shí)就增加這個(gè)版本字段。每個(gè)UPDATE語(yǔ)句中的WHERE子句會(huì)根據(jù)上次讀取的值來(lái)判斷這個(gè)版本號(hào)是否改變。通過(guò)查看PreparedStatement.executeUpdate()返回的記錄數(shù),應(yīng)用程序可以判斷UPDATE語(yǔ)句是否成功。如果這條記錄已被另一個(gè)事務(wù)更新或刪除,應(yīng)用程序可以回滾這個(gè)事務(wù),并重新開(kāi)始。
    在直接執(zhí)行SQL語(yǔ)句的應(yīng)用程序中,樂(lè)觀鎖機(jī)制的實(shí)現(xiàn)非常容易。不過(guò),使用諸如JDO和Hibernate的持久層構(gòu)架時(shí),實(shí)現(xiàn)更為容易,因?yàn)樗鼈円褜?lè)觀鎖作為配置選項(xiàng)提供。一旦啟用該配置選項(xiàng),持久層框架會(huì)自動(dòng)生成SQL UPDATE語(yǔ)句,執(zhí)行版本檢查。第12章將分析樂(lè)觀鎖的使用時(shí)機(jī)及其缺點(diǎn),并向你展示怎樣在iBATIS、JDO和Hibernate中使用樂(lè)觀鎖。
    樂(lè)觀鎖的名稱源自如下假定情況,即并發(fā)更新的幾率極小,此外應(yīng)用程序并不阻止并發(fā)更新,而是檢測(cè)并發(fā)更新,并從并發(fā)更新中恢復(fù)過(guò)來(lái)。另一種方式是使用悲觀鎖(pessimistic locking),它假定并發(fā)更新將會(huì)發(fā)生,因此必須預(yù)先阻止。

    悲觀鎖

    不同于樂(lè)觀鎖的另一種方式是使用悲觀鎖。當(dāng)讀取某些記錄時(shí),事務(wù)先鎖住這些記錄,這樣可以防止其他事務(wù)訪問(wèn)這些數(shù)據(jù)記錄。具體細(xì)節(jié)要視數(shù)據(jù)庫(kù)而定,不過(guò)糟糕的是,并非所有數(shù)據(jù)庫(kù)都支持悲觀鎖。如果數(shù)據(jù)庫(kù)支持悲觀鎖,在直接執(zhí)行SQL語(yǔ)句的應(yīng)用程序中,實(shí)現(xiàn)悲觀鎖非常
    容易。然而,正如你所預(yù)料的,在JDO或Hibernate應(yīng)用程序中使用悲觀鎖更為容易。JDO以配置選項(xiàng)的方式提供悲觀鎖,而Hibernate則提供一個(gè)簡(jiǎn)單實(shí)用的API,來(lái)鎖定對(duì)象。同樣,在第12章,你將學(xué)習(xí)何時(shí)使用悲觀鎖,分析其缺點(diǎn),并看看怎樣在iBATIS、JDO和Hibernate中使用悲觀鎖。

    posted on 2009-11-11 17:23 AK47 閱讀(988) 評(píng)論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫(kù)

    <2009年11月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产亚洲精品国产福利在线观看 | 色视频色露露永久免费观看 | 免费一级毛片免费播放| 亚洲人成色77777在线观看| 福利免费观看午夜体检区| 亚洲娇小性xxxx| 在线观看无码的免费网站| 亚洲大码熟女在线观看| 波多野结衣视频在线免费观看| 色天使色婷婷在线影院亚洲| 国产乱色精品成人免费视频| 日韩免费在线中文字幕| 中文亚洲AV片在线观看不卡 | 成人免费一区二区无码视频| 亚洲综合激情五月色一区| 国产精品视频免费一区二区三区| 色妞www精品视频免费看| 在线精品亚洲一区二区小说 | 亚洲免费在线视频观看| 久久亚洲精品专区蓝色区| 国产免费观看青青草原网站| j8又粗又长又硬又爽免费视频| 亚洲成AV人片在线观看ww| 日日麻批免费40分钟日本的| 国产偷国产偷亚洲高清在线| 亚洲伊人色欲综合网| 99在线精品视频观看免费| 亚洲成a∨人片在无码2023| 中文字幕精品亚洲无线码一区| 1000部拍拍拍18勿入免费视频下载| 亚洲中文字幕久久无码| 久久综合亚洲色HEZYO国产| 91九色视频无限观看免费| 精品国产亚洲一区二区三区在线观看 | 日本道免费精品一区二区| 亚洲国产成人久久综合一区| 亚洲国产成人久久一区久久| 免费A级毛片无码专区| 精品国产亚洲第一区二区三区 | 亚洲av日韩片在线观看| 99re6在线视频精品免费下载|