<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          事務(wù)相關(guān)知識(shí)點(diǎn)

          共 2378字,需瀏覽 5分鐘

           ·

          2020-12-24 04:01

          點(diǎn)擊上方「藍(lán)字」關(guān)注我們

          0x01:事務(wù)的基本要素(ACID)

          • 原子性(Atomicity):事務(wù)開始后所有操作,要么全部做完,要么全部不做,不可能停滯在中間環(huán)節(jié)。事務(wù)執(zhí)行過程中出錯(cuò),會(huì)回滾到事務(wù)開始前的狀態(tài),所有的操作就像沒有發(fā)生一樣。也就是說事務(wù)是一個(gè)不可分割的整體,就像化學(xué)中學(xué)過的原子,是物質(zhì)構(gòu)成的基本單位;

          • 一致性(Consistency):事務(wù)開始前和結(jié)束后,數(shù)據(jù)庫的完整性約束沒有被破壞 。比如A向B轉(zhuǎn)賬,不可能A扣了錢,B卻沒收到;

          • 隔離性(Isolation):同一時(shí)間,只允許一個(gè)事務(wù)請(qǐng)求同一數(shù)據(jù),不同的事務(wù)之間彼此沒有任何干擾。比如A正在從一張銀行卡中取錢,在A取錢的過程結(jié)束前,B不能向這張卡轉(zhuǎn)賬;

          • 持久性(Durability):事務(wù)完成后,事務(wù)對(duì)數(shù)據(jù)庫的所有更新將被保存到數(shù)據(jù)庫,不能回滾;


          0x02:事務(wù)的并發(fā)問題

          • 臟讀:事務(wù)A讀取了事務(wù)B更新的數(shù)據(jù),然后B回滾操作,那么A讀取到的數(shù)據(jù)是臟數(shù)據(jù);

          • 不可重復(fù)讀:事務(wù) A 多次讀取同一數(shù)據(jù),事務(wù) B 在事務(wù)A多次讀取的過程中,對(duì)數(shù)據(jù)作了更新并提交,導(dǎo)致事務(wù)A多次讀取同一數(shù)據(jù)時(shí),結(jié)果 不一致;

          • 幻讀:系統(tǒng)管理員A將數(shù)據(jù)庫中所有學(xué)生的成績(jī)從具體分?jǐn)?shù)改為ABCDE等級(jí),但是系統(tǒng)管理員B就在這個(gè)時(shí)候插入了一條具體分?jǐn)?shù)的記錄,當(dāng)系統(tǒng)管理員A改結(jié)束后發(fā)現(xiàn)還有一條記錄沒有改過來,就好像發(fā)生了幻覺一樣,這就叫幻讀;

          不可重復(fù)讀的和幻讀很容易混淆,不可重復(fù)讀側(cè)重于修改,幻讀側(cè)重于新增或刪除。解決不可重復(fù)讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表。

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

          事務(wù)隔離級(jí)別臟讀不可重復(fù)讀幻讀
          讀未提交(read-uncommitted)
          不可重復(fù)讀(read-committed)
          可重復(fù)讀(repeatable-read)
          串行化(serializable)

          MySQL默認(rèn)的事務(wù)隔離級(jí)別為repeatable-read;Oracle默認(rèn)系統(tǒng)事務(wù)隔離級(jí)別是read-committed。


          0x03:Spring五個(gè)不同的事務(wù)隔離級(jí)別

          TransactionDefinition接口中定義了五個(gè)不同的事務(wù)隔離級(jí)別,其含義如下:

          • ISOLATION_DEFAULT:這是一個(gè)PlatfromTransactionManager默認(rèn)的隔離級(jí)別,使用數(shù)據(jù)庫默認(rèn)的事務(wù)隔離級(jí)別.另外四個(gè)與JDBC的隔離級(jí)別相對(duì)應(yīng);

          • ISOLATION_READ_UNCOMMITTED:這是事務(wù)最低的隔離級(jí)別,它充許別外一個(gè)事務(wù)可以看到這個(gè)事務(wù)未提交的數(shù)據(jù)。這種隔離級(jí)別會(huì)產(chǎn)生臟讀,不可重復(fù)讀和幻像讀;

          • ISOLATION_READ_COMMITTED:保證一個(gè)事務(wù)修改的數(shù)據(jù)提交后才能被另外一個(gè)事務(wù)讀取。另外一個(gè)事務(wù)不能讀取該事務(wù)未提交的數(shù)據(jù)。這種事務(wù)隔離級(jí)別可以避免臟讀出現(xiàn),但是可能會(huì)出現(xiàn)不可重復(fù)讀和幻像讀;

          • ISOLATION_REPEATABLE_READ:這種事務(wù)隔離級(jí)別可以防止臟讀,不可重復(fù)讀。但是可能出現(xiàn)幻像讀。它除了保證一個(gè)事務(wù)不能讀取另一個(gè)事務(wù)未提交的數(shù)據(jù)外,還保證了避免下面的情況產(chǎn)生(不可重復(fù)讀);

          • ISOLATION_SERIALIZABLE:這是花費(fèi)最高代價(jià)但是最可靠的事務(wù)隔離級(jí)別。事務(wù)被處理為順序執(zhí)行。除了防止臟讀,不可重復(fù)讀外,還避免了幻像讀;


          0x04:Spring七個(gè)事務(wù)傳播行為

          • TransactionDefinition接口中定義了七個(gè)事務(wù)傳播行為;其含義如下:PROPAGATION_REQUIRED:如果存在一個(gè)事務(wù),則支持當(dāng)前事務(wù)。如果沒有事務(wù)則開啟一個(gè)新的事務(wù);

          • PROPAGATION_SUPPORTS:如果存在一個(gè)事務(wù),支持當(dāng)前事務(wù)。如果沒有事務(wù),則非事務(wù)的執(zhí)行。但是對(duì)于事務(wù)同步的事務(wù)管理器,PROPAGATION_SUPPORTS與不使用事務(wù)有少許不同;

          • PROPAGATION_MANDATORY:如果已經(jīng)存在一個(gè)事務(wù),支持當(dāng)前事務(wù)。如果沒有一個(gè)活動(dòng)的事務(wù),則拋出異常;

          • PROPAGATION_REQUIRES_NEW:總是開啟一個(gè)新的事務(wù)。如果一個(gè)事務(wù)已經(jīng)存在,則將這個(gè)存在的事務(wù)掛起;

          • PROPAGATION_NOT_SUPPORTED:總是非事務(wù)地執(zhí)行,并掛起任何存在的事務(wù);

          • PROPAGATION_NEVER:總是非事務(wù)地執(zhí)行,如果存在一個(gè)活動(dòng)事務(wù),則拋出異常;

          • PROPAGATION_NESTED:如果一個(gè)活動(dòng)的事務(wù)存在,則運(yùn)行在一個(gè)嵌套的事務(wù)中. 如果沒有活動(dòng)事務(wù), 則按TransactionDefinition.PROPAGATION_REQUIRED 屬性執(zhí)行;


          0x05:分布式事務(wù)CAP理論


          • 一致性(Consistency):一致性指的是數(shù)據(jù)的強(qiáng)一致性。每次的讀操作都是讀取的最新數(shù)據(jù)。即如果寫入某個(gè)數(shù)據(jù)成功的話,之后的讀取都應(yīng)該讀的是新寫入的數(shù)據(jù);如果寫入失敗的話,之后讀取的都不應(yīng)該是寫入失敗的數(shù)據(jù)。

          • 可用性(Availability):可用性指的是服務(wù)的可用性。即每個(gè)請(qǐng)求都能在合理的時(shí)間內(nèi)獲得符合預(yù)期的響應(yīng)結(jié)果。

          • 分區(qū)容錯(cuò)性(Partition Tolerance):分區(qū)容錯(cuò)性指的是當(dāng)節(jié)點(diǎn)之間的網(wǎng)絡(luò)出現(xiàn)問題之后,系統(tǒng)仍然能夠正常提供服務(wù)。

          在分布式的系統(tǒng)中,P是基本要求,而單體應(yīng)用則是CA系統(tǒng)。微服務(wù)系統(tǒng)通常是一個(gè)AP系統(tǒng),即同時(shí)滿足可用性和分區(qū)容錯(cuò)性。這樣就有了一個(gè)在分布式系統(tǒng)中保證數(shù)據(jù)強(qiáng)一致性的難題,這個(gè)難題的一個(gè)解決方案就是分布式事務(wù)。

          掃碼二維碼

          獲取更多精彩

          Java樂園

          有用!分享+在看?
          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品成人免费精品自在线观看 | 国产婷婷激情 | 日韩久久久久 | 无码一区二区三区四区五区六区七区 | 国产婬荡交换XXXⅩ黑人 |