欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Mysql事務(wù)特性、隔離特性的實(shí)現(xiàn)方法-創(chuàng)新互聯(lián)

一、 關(guān)系型數(shù)據(jù)庫的ACID特性
  1. 原子性(Atomicity):事務(wù)是最小的執(zhí)行單位,不允許分割。原子性確保要么執(zhí)行完整的動作,要么就什么都不做。
  2. 一致性(Consistency):執(zhí)行事務(wù)前后數(shù)據(jù)應(yīng)該保持一致,例如轉(zhuǎn)賬業(yè)務(wù)中,無論事務(wù)是否成功,雙方總額應(yīng)當(dāng)不變。
  3. 隔離性(Isolation):并發(fā)訪問數(shù)據(jù)庫時,一個用戶的事務(wù)不被其他事務(wù)所干擾,且各并發(fā)事務(wù)之間數(shù)據(jù)庫是獨(dú)立的。
  4. 持久性(Durability):一個事務(wù)被提交之后,它對數(shù)據(jù)庫中數(shù)據(jù)的改變是持久的,即使數(shù)據(jù)庫發(fā)生故障也不應(yīng)該對其有影響。
  • ACID之間的關(guān)系
    只有保證了事務(wù)的持久性、原子性和隔離性,才能保證一致性。即A、I、D是手段,C是目的。
    原子性、隔離性和持久性是數(shù)據(jù)庫的屬性,而一致性是應(yīng)用程序的屬性。
二、 并發(fā)事務(wù)帶來的問題
  1. 臟讀(Dirty read)
    一個事務(wù)執(zhí)行修改數(shù)據(jù)但是在提交之前進(jìn)行數(shù)據(jù)回滾(也就是什么都沒改),而另外一個事務(wù)在數(shù)據(jù)回滾之前讀取了這個數(shù)據(jù),即讀到了第一步修改過的數(shù)據(jù),這個數(shù)據(jù)即為臟數(shù)據(jù)。
  2. 丟失修改(Lost to modify)
    一個事務(wù)對某一數(shù)據(jù)進(jìn)行修改后,另一個事務(wù)也進(jìn)行了同樣的修改,這樣第一個事務(wù)內(nèi)的修改結(jié)果就丟失了,此為丟失修改。
  3. 不可重復(fù)讀(Unrepeatable read)
    指在一個事務(wù)內(nèi)多次讀同一數(shù)據(jù)。事務(wù)A兩次讀取同一數(shù)據(jù)之間事務(wù)B對數(shù)據(jù)進(jìn)行修改,則事務(wù)A兩次讀取的值不同。
  4. 幻讀(Phantom read)
    一個事務(wù)讀取了幾行數(shù)據(jù),另一個事務(wù)插入了幾行數(shù)據(jù),第一個事務(wù)再次查詢時就會發(fā)現(xiàn)一些原本不存在的記錄,此為幻讀。
三、SQL標(biāo)準(zhǔn)定義的事務(wù)隔離級別
  1. 讀取未提交(Read-Uncommitted):最低的隔離級別,允許讀取尚未提交的數(shù)據(jù)變更,可能導(dǎo)致臟讀、幻讀或不可重復(fù)讀。
  2. 讀取已提交(Read-Commited):允許讀取并發(fā)事務(wù)已經(jīng)提交的數(shù)據(jù),可以阻止臟讀,但不可避免幻讀和不可重復(fù)讀。
  3. 可重復(fù)讀(Repeatable-Read):對同一字段的多次讀取結(jié)果一致,除非數(shù)據(jù)是被本身事務(wù)自己所修改,可以阻止臟讀和不可重復(fù)讀,幻讀仍有可能。
  4. 可串行化(Serializable):最高的隔離級別,完全服從ACID隔離級別。所有的事務(wù)依次逐個執(zhí)行,事務(wù)之間完全不會產(chǎn)生干擾。
四、 MySQL隔離級別的實(shí)現(xiàn)方法

MySQL的隔離級別基于鎖和MVCC機(jī)制(多版本并發(fā)控制)共同實(shí)現(xiàn)。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、興山網(wǎng)站維護(hù)、網(wǎng)站推廣。4.1 MVCC技術(shù)(包含版本鏈、undo日志和Read View)
  • 版本鏈:數(shù)據(jù)表中的每行數(shù)據(jù)除了肉眼可見的數(shù)據(jù)還有幾個隱藏字段,如下所述
    db_trx_id:最近修改/插入此行數(shù)據(jù)的事務(wù)ID:記錄/創(chuàng)建這條記錄最后一次修改該記錄的事務(wù)ID;
    db_roll_ptr:回滾指針,指向這條記錄的上一個版本(存儲于rollback segment里);
    db_row_id:隱式主鍵,若數(shù)據(jù)表沒有自定義主鍵,InnoDB會以db_row_id產(chǎn)生一個聚簇索引;
    delete_bit:刪除標(biāo)志,記錄數(shù)據(jù)被更新或刪除(并不是真的刪除,而是改變刪除標(biāo)志)
  • undo日志:每次對數(shù)據(jù)庫記錄進(jìn)行改動都會生成一條undo日志,每條undo日志也有一個roll_ptr屬性,可以將此條數(shù)據(jù)對應(yīng)的所有undo日志串成一個鏈表,表示這條記錄的版本鏈。
    在這里插入圖片描述

對該條記錄每次進(jìn)行更新后,都會將舊值放到一條undo日志中,視為該記錄的一個舊版本,所有的版本形成一個鏈表(版本鏈),版本鏈的頭節(jié)點(diǎn)就是當(dāng)前記錄最新的值,另外,每個版本中還包含生成該版本時對應(yīng)的事務(wù)id。

  • Read View(讀視圖)
    事務(wù)進(jìn)行快照讀操作的時候產(chǎn)生讀視圖,在該事務(wù)執(zhí)行快照讀的一刻,會生成數(shù)據(jù)庫系統(tǒng)當(dāng)前的一個快照。讀視圖記錄并維護(hù)系統(tǒng)當(dāng)前活躍事務(wù)的ID列表,表示系統(tǒng)中當(dāng)前不應(yīng)該被本事務(wù)看到的其他事務(wù)ID列表。
    讀視圖主要用于做可見性判斷,即某個事務(wù)執(zhí)行快照讀的時候,對該記錄創(chuàng)建一個讀視圖,把它比作條件用來判斷當(dāng)前事務(wù)能夠看到哪個版本的數(shù)據(jù),既可能是當(dāng)前最新的數(shù)據(jù),也有可能是該行記錄的undo日志中某個版本的數(shù)據(jù)。
4.2 RU(臟讀、不可重復(fù)讀、幻讀都無法避免)
  • 所有的讀操作不加鎖,讀到的數(shù)據(jù)都是最新的數(shù)據(jù);
  • 所有的寫操作加行級鎖,寫完釋放。
4.3 RC(不可重復(fù)讀和幻讀無法避免)和RR(無法避免幻讀)
  • RC隔離級別:
    讀操作:不加鎖,每個快照讀都會生成并獲取最新的Read View,在讀取時如果該行數(shù)據(jù)被其他事務(wù)占用,則通過版本鏈和Read View找到上一個有效的歷史記錄。
    寫操作:加行級鎖。事務(wù)執(zhí)行后,會在undo日志中寫入修改記錄,更新版本鏈。

  • RR隔離級別:
    讀操作:不加鎖,同一個事務(wù)中第一個快照讀才會創(chuàng)建Read View,即之后快照讀獲取的都是同一個Read View,故可以避免重復(fù)讀。
    寫操作:同RC。

4.4 串行化:讀和寫都加鎖。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

分享名稱:Mysql事務(wù)特性、隔離特性的實(shí)現(xiàn)方法-創(chuàng)新互聯(lián)
瀏覽地址:http://chinadenli.net/article12/ddepdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、微信小程序、軟件開發(fā)、商城網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司