<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>

          數(shù)據(jù)庫事務(wù)的四大特征

          共 1841字,需瀏覽 4分鐘

           ·

          2021-04-26 07:46

          點(diǎn)擊關(guān)注,與你共同成長!


          數(shù)據(jù)庫事務(wù)的四大特征

          原子性

          指事物包含的所有操作要么全部成功,要么全部回滾。

          一致性

          指事物必須是數(shù)據(jù)庫從一個(gè)一致性狀態(tài)到另一個(gè)一致性狀態(tài)。也就是說一個(gè)事物執(zhí)行之前和執(zhí)行之后都必須處于一致性狀態(tài)。

          隔離性

          當(dāng)多個(gè)用戶并發(fā)訪問數(shù)據(jù)庫時(shí),比如操作同一張表時(shí),數(shù)據(jù)庫為每一個(gè)用戶開啟的事務(wù),不能被其他事務(wù)的操作所干擾,多個(gè)并發(fā)事物之間要相互隔離。關(guān)于事務(wù)的隔離性數(shù)據(jù)庫提供了多種隔離級(jí)別,下面就是。。。

          持久性

          指事務(wù)一旦被提交,那么數(shù)據(jù)庫的數(shù)據(jù)的改變就是永久性的,即便是在數(shù)據(jù)庫系統(tǒng)遇到故障的情況下也不會(huì)丟失事務(wù)的操作。

          數(shù)據(jù)庫事務(wù)的隔離級(jí)別有4種,由低到高分別是:Read uncommitted、Read committed、Repeatablead、Serializable。事物的并發(fā)操作中可能休閑臟讀,不可重復(fù)讀,幻讀。

          Read uncommitted

          讀 未提交,就是一個(gè)事務(wù)可以讀取另一個(gè)未提交事務(wù)的數(shù)據(jù)。
          eg: 老板要給程序員發(fā)工資,程序員的工資是3.6萬/月。但是發(fā)工資時(shí)老板不小心按錯(cuò)了數(shù)字,按成3.9萬/月,該錢已經(jīng)打到程序員的戶口,但是事務(wù)還沒有提交,就在這時(shí),程序員去查看自己這個(gè)月的工資,發(fā)現(xiàn)比往常多了3千元,以為漲工資了非常高興。但是老板及時(shí)發(fā)現(xiàn)了不對(duì),馬上回滾差點(diǎn)就提交了的事務(wù),將數(shù)字改成3.6萬再提交。

          分析:

          實(shí)際程序員這個(gè)月工資還是3.6萬,但是程序員看到的是3.9萬,他看到的是老板沒提交事物的數(shù)據(jù)。就是臟讀。
          解決方法:Read commited讀提交,能解決臟讀問題。

          Read committed

          讀 提交,就是事務(wù)要等另一個(gè)事物提交后才能讀取數(shù)據(jù)
          eg: 程序員拿著信用卡去享受生活(卡里當(dāng)然是只有3.6萬),當(dāng)他埋單時(shí)(程序員事務(wù)開啟),收費(fèi)系統(tǒng)事先檢測(cè)到他的卡里有3.6萬,就在這個(gè)時(shí)候??!程序員的妻子要把錢全部轉(zhuǎn)出充當(dāng)家用,并提交。當(dāng)收費(fèi)系統(tǒng)準(zhǔn)備扣款時(shí),再檢測(cè)卡里的金額,發(fā)現(xiàn)已經(jīng)沒錢了(第二次檢測(cè)金額當(dāng)然要等待妻子轉(zhuǎn)出金額事務(wù)提交完)。程序員就會(huì)很郁悶,明明卡里是有錢的…

          分析:

          這就是讀提交,若有事務(wù)對(duì)數(shù)據(jù)進(jìn)行更新(UPDATE)操作時(shí),讀操作事物要等這個(gè)更新操作事物提交才能讀取數(shù)據(jù),可以解決臟讀問題。但在這個(gè)示例中,出現(xiàn)了一個(gè)事物范圍內(nèi)兩個(gè)相同的查詢卻返回了不同數(shù)據(jù),這就是不可重復(fù)讀。

          解決方法:Repeatable read

          Repeatable read

          重復(fù)讀,就是在開始讀取數(shù)據(jù)(事物開啟)時(shí),不再允許修改操作。MySQL是這一級(jí)別。
          eg: 程序員拿著信用卡去享受生活(卡里當(dāng)然是只有3.6萬),當(dāng)他埋單時(shí)(事務(wù)開啟,不允許其他事務(wù)的UPDATE修改操作),收費(fèi)系統(tǒng)事先檢測(cè)到他的卡里有3.6萬。這個(gè)時(shí)候他的妻子不能轉(zhuǎn)出金額了。接下來收費(fèi)系統(tǒng)就可以扣款了。

          分析:

          重復(fù)讀可以解決不可重復(fù)讀問題。寫到這里,應(yīng)該明白一點(diǎn)就是,不可重復(fù)讀對(duì)應(yīng)的是修改 UPDATE操作。但是可能會(huì)有幻讀問題。因?yàn)榛米x問題對(duì)應(yīng)的是插入INSERT操作,而不是UPDATE操作。

          什么時(shí)候出現(xiàn)幻讀?

          eg: 程序員某一天消費(fèi),花了2千元,然后他的妻子去查看他今天的消費(fèi)記錄(全表掃描FTS,妻子事物開啟),看到確實(shí)是花了2千元,就在這個(gè)時(shí)候,程序員花了1萬元買了一臺(tái)電腦,即新增INSERT了一條消費(fèi)記錄,并提交。當(dāng)妻子打印程序員的消費(fèi)記錄清單時(shí)(妻子提交事務(wù)),發(fā)現(xiàn)花了1.2萬元,似乎出現(xiàn)了幻讀,就是幻讀。

          解決:Serializable

          Serializable序列化

          Serializable是最高的事務(wù)隔離級(jí)別,在該級(jí)別下,事務(wù)串行化順序執(zhí)行,可以避免臟讀,不可重復(fù)讀與幻讀。但是這種事務(wù)隔離級(jí)別效率低下,比較耗數(shù)據(jù)庫性能,一般不用。

          大多數(shù)數(shù)據(jù)庫默認(rèn)的事務(wù)級(jí)別隔離級(jí)別是Read committed、比如Sql Server,Oracle。Mysql的默認(rèn)級(jí)別是Repeatable read


          Java集合-Iterator

          Java集合-List

          超經(jīng)典的 25 道 MyBatis 面試題!


          以上,便是今天的分享,希望大家喜歡,覺得內(nèi)容不錯(cuò)的,歡迎「分享」「」或者點(diǎn)擊「在看」支持,謝謝各位。

          瀏覽 41
          點(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>
                  欧美三级韩国三级日本三级在线观看 | 久久久久7777 | 大鸡吧操小穴视频 | 日韩无码成人片 | 大香蕉最新视频精品 |