如何學(xué)好java

          如何學(xué)好java,其實(shí)很簡(jiǎn)單,只要用心體會(huì),慢慢積累!
          posts - 106, comments - 7, trackbacks - 0, articles - 3
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          一.什么是事務(wù)  
               事務(wù)是應(yīng)用程序中一系列嚴(yán)密的操作,所有操作必須成功完成,否則在每個(gè)操作中所作的所有更改都會(huì)被撤消。也就是事務(wù)具有原子性,一個(gè)事務(wù)中的一系列的操作要么全部成功,要么一個(gè)都不做。
              事務(wù)的結(jié)束有兩種,當(dāng)事務(wù)中的所以步驟全部成功執(zhí)行時(shí),事務(wù)提交。如果其中一個(gè)步驟失敗,將發(fā)生回滾操作,撤消撤消之前到事務(wù)開(kāi)始時(shí)的所以操作。
                  二.事務(wù)的 ACID
              事務(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)必須維護(hù)事務(wù)的以下特性 ( 簡(jiǎn)稱 ACID) :

             原子性 (Atomicity)

            一致性 (Consistency)

            隔離性 (Isolation)

            持久性 (Durability)

          原子性 (Atomicity)

          事務(wù)中的所有操作要么全部執(zhí)行,要么都不執(zhí)行;

          如果事務(wù)沒(méi)有原子性的保證,那么在發(fā)生系統(tǒng)

          故障的情況下,數(shù)據(jù)庫(kù)就有可能處于不一致?tīng)?

          態(tài)。

           

          原子性 (Atomicity)

          如果故障發(fā)生在 write(A) 和 read(B) 之間,則將有可能造成帳戶 A 的余額已經(jīng)減去 50 元錢,而帳戶 B 的余額卻沒(méi)有改變,憑空就少了 50 元錢。值得注意的是,即使沒(méi)有故障發(fā)生,系統(tǒng)在某一時(shí)刻也會(huì)處于不一致?tīng)顟B(tài)。原子性的要求就是這種不一致?tīng)顟B(tài)除了在事務(wù)執(zhí)行當(dāng)中出現(xiàn)外,在其他任何時(shí)刻都 是不可見(jiàn)的。保證原子性是 DBMS 的責(zé)任:即事務(wù)管理器和恢復(fù)管理器的責(zé)任。

           

          一致性 (Consistency)

          主要強(qiáng)調(diào)的是,如果在執(zhí)行事務(wù)之前數(shù)據(jù)庫(kù)是一致的,那么在執(zhí)行事務(wù)之后數(shù)據(jù)庫(kù)也還是一

          致的;所謂一致性簡(jiǎn)單地說(shuō)就是數(shù)據(jù)庫(kù)中數(shù)據(jù)的完整性,包括它們的正確性。對(duì)于圖中的事務(wù) Ti 來(lái)說(shuō),一致性要求就是事務(wù)的執(zhí)行不改變帳戶 A 和帳戶 B 的和。否則的話事務(wù)就會(huì)創(chuàng)造或銷毀錢!單個(gè)事務(wù)的一致性是由對(duì)該事務(wù)進(jìn)行編鍵的應(yīng)用程序員的責(zé)任,但是在某些情況下利用 DBMS 中完整性約束 ( 如觸發(fā)器 ) 的自動(dòng)檢查功能有助于一致性的維護(hù)。

           

          隔離性 (Isolation)

          即使多個(gè)事務(wù)并發(fā)(同時(shí))執(zhí)行,每個(gè)事務(wù)都感覺(jué)不到系統(tǒng)中有其他的事務(wù)在執(zhí)行,因而也

          就能保證數(shù)據(jù)庫(kù)的一致性;事情的起因 : 即使每個(gè)事務(wù)都能保持一致性和原子性,但如果幾個(gè)事務(wù)并發(fā)執(zhí)行,且訪問(wèn)相同的數(shù)據(jù)項(xiàng),則它們的操作會(huì)以人們所不希望的某種方式交叉執(zhí)行,結(jié)果導(dǎo)致不一致的狀態(tài)!訪問(wèn)相同數(shù)據(jù)項(xiàng)的兩個(gè)事務(wù)并發(fā)執(zhí)行

          解決辦法 :

          如果幾個(gè)事務(wù)要訪問(wèn)相同的數(shù)據(jù)項(xiàng),為了保證數(shù)據(jù)庫(kù)的一致性,可以讓這幾個(gè)事務(wù):

          ① 串行執(zhí)行:即一個(gè)接著一個(gè)地執(zhí)行事務(wù);

          ② 并發(fā)執(zhí)行:即同時(shí)執(zhí)行多個(gè)事務(wù),但用并發(fā)控制機(jī)制來(lái)解決不同事務(wù)間的相互影響。隔離性的保證 :

          事務(wù)的隔離性能夠確保事務(wù)并發(fā)執(zhí)行后的系統(tǒng)狀態(tài)與這些事務(wù)按某種次序串行執(zhí)行后的狀態(tài)是等價(jià)的。

          保證隔離性也是 DBMS 的責(zé)任:即并發(fā)控制管理器的責(zé)任。

           

          持久性 (Durability)

          事務(wù)成功執(zhí)行后它對(duì)數(shù)據(jù)庫(kù)的修改是永久的,即使系統(tǒng)出現(xiàn)故障也不受影響。

          持久性的含義是說(shuō):一旦事務(wù)成功執(zhí)行之后,它對(duì)數(shù)據(jù)庫(kù)的更新是永久的。可以用以下兩種

          方式中的任何一種來(lái)達(dá)到持久性的目的:

          以犧牲應(yīng)用系統(tǒng)的性能為代價(jià)

          以多占用磁盤空間為代價(jià)

          以犧牲應(yīng)用系統(tǒng)的性能為代價(jià):要求事務(wù)對(duì)數(shù)據(jù)庫(kù)系統(tǒng)所做的更新在事務(wù)結(jié)束前已經(jīng)寫入磁盤;以 多占用磁盤空間為代價(jià):要求事務(wù)已經(jīng)執(zhí)行的和已寫到磁盤的、對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新的信息是充分的(例如,數(shù)據(jù)庫(kù)日志的信息就足夠的多),使得 DBMS 在系統(tǒng)出現(xiàn)故障后重新啟動(dòng)系統(tǒng)時(shí),能夠 ( 根據(jù)日志 ) 重新構(gòu)造更新。保證持久性也是 DBMS 的責(zé)任:即恢復(fù)

          管理器的責(zé)任。

           

          事物的狀態(tài)有如下幾種:

          ⑴ 中止事務(wù):執(zhí)行中發(fā)生故障、不能執(zhí)行完成的

          事務(wù);

          ⑵ 事務(wù)回滾:將中止事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新撤消

          掉;

          ⑶ 已提交事務(wù):成功執(zhí)行完成的事務(wù)。

           

          系統(tǒng)的恢復(fù)步驟是:

          1 、反向掃描文件日志(即從最后向前掃描日志文件),查找該事務(wù)

          的更新操作。

          2 、對(duì)該事務(wù)的更新操作執(zhí)行逆操作。即將日志記錄 “ 更新前的值 ” 寫

          入數(shù)據(jù)庫(kù)。這樣,如果記錄中是插入操作,則相當(dāng)于做刪除操

          作;若記錄中是刪除操作,則做插入操作;若是修改操作,則相

          當(dāng)于用修改前的值代替修改后的值。

          3 、繼續(xù)反向掃描日志文件,查找該事務(wù)的其他更新操作,并做和 2

          一樣的同樣處理。

          4 、如此處理下去,直至讀到此事務(wù)的開(kāi)始標(biāo)記,事務(wù)的故障恢復(fù)就

          完成了。

          事務(wù)的隔離級(jí)別

          隔離級(jí)別定義了事務(wù)與事務(wù)之間的隔離程度。

          隔離級(jí)別與并發(fā)性是互為矛盾的:隔離程度越高,數(shù)據(jù)庫(kù)的并發(fā)性越差;隔離程度越低,數(shù)

          據(jù)庫(kù)的并發(fā)性越好。

          ANSI/ISO SQL92 標(biāo)準(zhǔn)定義了一些數(shù)據(jù)庫(kù)操作的隔離級(jí)別

             未提交讀( read uncommitted )

             提交讀( read committed )

             重復(fù)讀( repeatable read )

             串行讀( serializable )

          隔離級(jí)別的效果更新丟失( lost update ):當(dāng)系統(tǒng)允許兩個(gè)事務(wù)同時(shí)更新同一數(shù)據(jù)是,發(fā)生更新丟失。臟讀( dirty read ):當(dāng)一個(gè)事務(wù)讀取另一個(gè)事務(wù)尚未提交的修改時(shí),產(chǎn)生臟讀。

          不可重復(fù)讀取( nonrepeatableread ):同一查詢?cè)谕皇聞?wù)中多次進(jìn)行,由于其他提交事務(wù)所做的修改或刪除,每次返回不同的結(jié)果集,此時(shí)發(fā)生不可重復(fù)讀取。

          幻像( phantom read ):同一查詢?cè)谕皇聞?wù)中多次進(jìn)行,由于其他提交事務(wù)所做的插入操作,每次返回不同的結(jié)果集,此時(shí)發(fā)生幻像讀。


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 曲阳县| 兴和县| 疏附县| 闽侯县| 上犹县| 贺兰县| 惠水县| 平遥县| 武城县| 江北区| 海林市| 原平市| 南部县| 合川市| 江孜县| 武强县| 始兴县| 基隆市| 玉屏| 兴和县| 司法| 偏关县| 海淀区| 股票| 贵阳市| 连南| 通城县| 闽侯县| 安平县| 宾川县| 延川县| 商水县| 长子县| 堆龙德庆县| 元朗区| 新建县| 孟津县| 精河县| 衡水市| 郯城县| 宁津县|