最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql事務(wù)的基本要素與事務(wù)隔離級別詳解

 更新時間:2023年08月15日 09:22:29   作者:SSS_HuLiang  
這篇文章主要介紹了mysql事務(wù)的基本要素與事務(wù)隔離級別詳解,事務(wù)是一種機制、一個操作序列,包含了一組數(shù)據(jù)庫操作命令,并且把所有的命令作為一個整體一起向系統(tǒng)提交或撤銷操作請求,需要的朋友可以參考下

mysql事務(wù)(ACID,臟讀,不可重復(fù)讀,幻讀,隔離級別)

何為事務(wù)?事務(wù)是執(zhí)行某個任務(wù)時的一系列操作,是一組SQL語句,多條SQL的集合。

事務(wù)是一種機制、一個操作序列,包含了一組數(shù)據(jù)庫操作命令,并且把所有的命令作為一個整體一起向系統(tǒng)提交或撤銷操作請求,即這一組數(shù)據(jù)庫命令要么都執(zhí)行,要么都不執(zhí)行。

一、事務(wù)的基本要素(ACID)

1、原子性(Atomicity)

原子,是物質(zhì)構(gòu)成的基本單位,不可分割,也就是說事務(wù)是一個不可分割的整體。

事務(wù)里面的SQL要么全執(zhí)行,要么全不執(zhí)行,不可能停滯在中間環(huán)節(jié)。

事務(wù)執(zhí)行過程中出錯,會回滾到事務(wù)開始前的狀態(tài),所有的操作就像沒有發(fā)生一樣。

例子:就拿A與B轉(zhuǎn)賬為例,一條語句從A里扣錢,另一條語句往B身上加錢,如果這兩條語句不能全部執(zhí)行,而是成功了一部分,那事務(wù)就沒有存在的意義了。

2、一致性(Consistency)

事務(wù)開始前和結(jié)束后,數(shù)據(jù)庫的一致性約束沒有被破壞。

例子:比如A向B轉(zhuǎn)賬100元,而余額里面只有90元,B已經(jīng)收到錢,A開始扣錢,發(fā)現(xiàn)錢不夠,然后事務(wù)需要回滾,這是原子性?。。。。ㄒ慈繄?zhí)行—轉(zhuǎn)賬成功一加一減,要么全部失敗—轉(zhuǎn)賬失敗,金額不變)。

所以不管是成功,還是失敗,數(shù)據(jù)都是一致的,什么意思呢?

轉(zhuǎn)賬成功,A減了錢,B加了錢,數(shù)據(jù)一致。轉(zhuǎn)賬失敗,A和B的錢都沒變化,數(shù)據(jù)一致。A減了錢,B卻沒收到,或者A沒減錢,B收到了,那數(shù)據(jù)就是不一致了。

一致性其實是由原子性(執(zhí)行成功,執(zhí)行失敗數(shù)據(jù)一致),隔離性(其他事務(wù)不會影響數(shù)據(jù)一致),持久性(需要數(shù)據(jù)持久化)決定的,也就是C是由AID做基礎(chǔ)的,保證了數(shù)據(jù)的一致性。

3、隔離性(Isolation)

同一時間,只允許一個事務(wù)請求同一數(shù)據(jù),不同的事務(wù)之間彼此沒有任何干擾。

例子:A正在從一張銀行卡中取錢,在A取錢的過程結(jié)束前,B不能向這張卡轉(zhuǎn)賬。

再比如A用戶讀取訂單列表的時候,B用戶操作,把某條訂單給刪了,就造成了臟讀,A讀的數(shù)據(jù)是錯誤的。

4、持久性(Durability)

事務(wù)完成后,事務(wù)對數(shù)據(jù)庫的所有更新將被保存到數(shù)據(jù)庫,不能回滾。

數(shù)據(jù)到物理存儲中,已經(jīng)持久化,所以有持久性。

二、事務(wù)的并發(fā)問題

1、臟讀(DirtyReads)

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

例子:B修改了訂單詳情,還未提交事務(wù),A查看詳情(讀的是B修改后的數(shù)據(jù)),此時B事務(wù)出錯,進(jìn)行回滾。A查看的數(shù)據(jù)就是臟的(假數(shù)據(jù))。

2、不可重復(fù)讀(Non-RepeatableReads)

前后多次讀取,數(shù)據(jù)內(nèi)容不一致:事務(wù)A多次讀取同一數(shù)據(jù),事務(wù)B在事務(wù)A多次讀取的過程中,對數(shù)據(jù)作了更新并提交,導(dǎo)致事務(wù)A多次讀取同一數(shù)據(jù)時,結(jié)果不一致。

例子:事務(wù)A修改用戶姓名,此時年齡為20,事務(wù)B修改年齡為25,等事務(wù)A修改完再查詢,發(fā)現(xiàn)年齡由20變成了25。此時事務(wù)B回滾,A再返回頁面發(fā)現(xiàn)年齡變回了20,多次讀取,年齡20-25-20,重復(fù)讀出來的數(shù)據(jù)內(nèi)容不一致。

3、幻讀(PhantomRead)

前后多次讀取,數(shù)據(jù)內(nèi)容不一致

例子:A將數(shù)據(jù)庫中所有學(xué)生的成績從具體分?jǐn)?shù)重置為0,但是B就在這個時候插入了一條具體分?jǐn)?shù)100的記錄,當(dāng)A改結(jié)束后發(fā)現(xiàn)還有一條記錄沒有改過來,就好像發(fā)生了幻覺一樣,這就叫幻讀。 小結(jié):不可重復(fù)讀的和幻讀很容易混淆,不可重復(fù)讀側(cè)重于修改,幻讀側(cè)重于新增或刪除。解決不可重復(fù)讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表

三、mysql事務(wù)隔離級別

有四種隔離級別,用來解決數(shù)據(jù)庫操作中產(chǎn)生的各種問題。java中Connection類里面定義了對應(yīng)的數(shù)字,分別是

1、讀未提交(Readuncommitted)

所有事務(wù)能夠讀取其他事務(wù)未提交的數(shù)據(jù),會造成臟讀。因此在該種隔離級別下,造成臟讀、不可重復(fù)讀和幻讀。

2、讀已提交(Readcommitted)

Oracle和SQLServer默認(rèn)的隔離級別②

所有事務(wù)只能讀取其他事務(wù)已經(jīng)提交的內(nèi)容,能夠徹底解決臟讀的現(xiàn)象。但在這種隔離級別下,會出現(xiàn)一個事務(wù)的前后多次的查詢中卻返回了不同內(nèi)容的數(shù)據(jù)的現(xiàn)象,也就是出現(xiàn)了不可重復(fù)讀。

3、可重復(fù)讀(Repeatableread)

mysql默認(rèn)隔離級別④

所有事務(wù)前后多次的讀取到的數(shù)據(jù)內(nèi)容是不變的,也就是某個事務(wù)在執(zhí)行的過程中,不允許其他事務(wù)進(jìn)行update(delete也屬于update范疇)操作,但允許其他事務(wù)進(jìn)行add操作,造成某個事務(wù)前后多次讀取到的數(shù)據(jù)總量不一致的現(xiàn)象,從而產(chǎn)生幻讀。

4、可串行化(Serializable)

所有的事務(wù)就像被串起來,有秩序地執(zhí)行,類似java的synchronized同步。所以他們之間不存在沖突,從而能有效地解決臟讀、不可重復(fù)讀和幻讀的現(xiàn)象。

但是安全和效率不能兼得,會導(dǎo)致大量的操作超時和鎖競爭,從而大大降低數(shù)據(jù)庫的性能,一般不使用這樣事務(wù)隔離級別。

事務(wù)隔離級別對應(yīng)表

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

到此這篇關(guān)于mysql事務(wù)的基本要素與事務(wù)隔離級別詳解的文章就介紹到這了,更多相關(guān)mysql事務(wù)的基本要素內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用mysql workbench自動生成ER圖的實現(xiàn)步驟

    使用mysql workbench自動生成ER圖的實現(xiàn)步驟

    MySQL Workbench是一款專為MySQL設(shè)計的ER/數(shù)據(jù)庫建模工具,它是著名的數(shù)據(jù)庫設(shè)計工具DBDesigne4的繼任者,可以通過MySQL Workbench設(shè)計和創(chuàng)建新的數(shù)據(jù)庫圖示,本文給大家介紹了使用mysql workbench自動生成ER圖的實現(xiàn)步驟,需要的朋友可以參考下
    2024-06-06
  • lnmp重置mysql數(shù)據(jù)庫root密碼的兩種方法

    lnmp重置mysql數(shù)據(jù)庫root密碼的兩種方法

    這篇文章給大家介紹了lnmp重置mysql數(shù)據(jù)庫root密碼的兩種方法,第一種方法通過腳本重置密碼,第二種方法通過命令修改,具體操作方法大家參考下本文
    2017-07-07
  • Mac下安裝mysql5.7.18的詳細(xì)步驟

    Mac下安裝mysql5.7.18的詳細(xì)步驟

    這篇文章主要為大家詳細(xì)介紹了]Mac下安裝mysql5.7.18的詳細(xì)步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • clickhouse分布式表的操作示例詳解

    clickhouse分布式表的操作示例詳解

    這篇文章主要為大家介紹了clickhouse分布式表的操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • MySQL的索引失效的原因?qū)嵗敖鉀Q方案

    MySQL的索引失效的原因?qū)嵗敖鉀Q方案

    這篇文章主要討論了MySQL索引失效的常見原因及其解決方案,它涵蓋了數(shù)據(jù)類型不匹配、隱式轉(zhuǎn)換、函數(shù)或表達(dá)式、范圍查詢、LIKE查詢、OR條件、全表掃描、索引選擇性低、覆蓋索引不足和統(tǒng)計信息不準(zhǔn)確等問題,感興趣的朋友一起看看吧
    2024-12-12
  • MySQL存儲過程實踐(in、out、inout)

    MySQL存儲過程實踐(in、out、inout)

    文章介紹了數(shù)據(jù)庫中的存儲過程,包括其定義、優(yōu)缺點、性能調(diào)校與撰寫,以及創(chuàng)建和調(diào)用方法,還詳細(xì)說明了存儲過程的參數(shù)類型,包括IN、OUT和INOUT,并提供了示例代碼,最后,文章還解決了存儲過程名已存在的報錯問題
    2025-11-11
  • ERROR 2002 (HY000): Can''t connect to local MySQL server through socket ''/tmp/mysql.sock''

    ERROR 2002 (HY000): Can''t connect to local MySQL server thr

    mysql 支持 socket 和 TCP/IP 連接。那么 mysql.sock 這個文件有什么用呢?本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2019-11-11
  • MySQL主從復(fù)制延遲原因以及解決方案

    MySQL主從復(fù)制延遲原因以及解決方案

    這篇文章主要介紹了MySQL主從復(fù)制延遲原因以及解決方案,幫助大家更好的理解和使用數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-09-09
  • 大廠面試必問題之MySQL大文本如何進(jìn)行處理

    大廠面試必問題之MySQL大文本如何進(jìn)行處理

    這篇文章主要介紹了大廠面試必問題之MySQL大文本如何進(jìn)行處理的相關(guān)資料,面試者需要展示對MySQL索引機制的深入理解,并提出合適的索引類型和創(chuàng)建策略,需要的朋友可以參考下
    2025-01-01
  • 詳解MySQL幻讀及如何消除

    詳解MySQL幻讀及如何消除

    這篇文章主要介紹了詳解MySQL 幻讀及解決方法,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-03-03

最新評論

秀山| 荔波县| 厦门市| 深泽县| 滦南县| 余江县| 鲁山县| 安多县| 合阳县| 普安县| 汝州市| 珲春市| 桂林市| 栖霞市| 婺源县| 新建县| 平江县| 万荣县| 革吉县| 长汀县| 凤翔县| 綦江县| 敦化市| 台北市| 藁城市| 隆德县| 景德镇市| 宜昌市| 乌恰县| 南木林县| 永安市| 江安县| 永仁县| 永登县| 塘沽区| 文安县| 滕州市| 乐业县| 西充县| 桃江县| 鄄城县|