MySQL——事務、MVCC

目錄

什么是事務?

事務的四大特性

事務的隔離級別

事務的原理

redo log

undo log

MVCC實現原理

概念

隱藏字段

undo log版本鏈

readview


什么是事務?

? ? 事務是一組操作的集合,它是一個不可分割的工作單位,事務會把所有的操作作為一個整體一起向系統提交或撤銷操作請求,即這些操作要么同時成功,要不同時失敗。

? ??用一個形象的比喻:事務就像銀行轉賬操作,從A賬戶扣款和向B賬戶加款這兩個操作必須作為一個整體執行——要么都成功完成,要么都不執行。如果只執行了其中一個操作,就會導致數據不一致。

事務的四大特性

  • 原子性:事務是不可分割的最小操作單元,要么同時成功,要么同時失敗。
  • 一致性:事務完成時,必須使所有的數據保持一致狀態。
  • 隔離性:數據庫系統提供的隔離機制,保證事務在不受外部并發操作影響的獨立環境下運行。
  • 持久性:事務一旦提交或回滾,它對數據庫中的數據的改變就是永久的。

事務的隔離級別

  • 讀未提交(Read Uncommitted):事務可以讀取其他未提交事務的修改。會導致臟讀(Dirty Read)、不可重復讀和幻讀。

  • 讀已提交(Read Committed):事務只能讀取其他已提交事務的修改。解決了臟讀,但仍可能存在不可重復讀(Non-repeatable Read)?和幻讀。這是Oracle等數據庫的默認級別。

  • 可重復讀(Repeatable Read):確保在同一事務中多次讀取同一數據的結果是一致的。解決了臟讀和不可重復讀,但仍可能存在幻讀(Phantom Read)。這是MySQL InnoDB的默認級別。

  • 串行化(Serializable):最高隔離級別,強制事務串行執行,完全避免臟讀、不可重復讀和幻讀,但性能開銷最大。

事務的原理

redo log

? ? 重做日志,記錄的是事務提交時數據頁的物理修改,是用來實現事務的持久性

? ? 該日志文件由兩部分組成:重做日志緩沖(redo log buffer)以及重做日志文件(redo log file),前者是在內存中,后者在磁盤中,當事務提交之后會把所有的修改信息都存到該日志文件中,用于在刷新臟頁到磁盤,發生錯誤時,進行數據恢復使用

? ? 當對緩沖區的數據進行增刪改之后,首先會把增刪改的數據記錄在redo log buffer中,redo log buffer就會去記錄數據頁的物理變化。當事務提交的時候就會把redo log buffer中數據頁變化刷新到磁盤中。當進行臟頁刷新時出錯了,就能通過redo log進行恢復。

undo log

? ? 回滾日志,用于記錄數據被修改前的信息,作用包含:提供回滾、MVCC(多版本并發控制)。

? ? redo log是記錄物理日志,而undo log是邏輯日志。當執行delete或update時,它都會記錄一條相反的記錄。當執行rollback時,就可以從undo log中的邏輯記錄讀取到相應的內容

? ? Undo log銷毀:undo log在事務執行時產生,事務提交時,并不會立刻刪除undo log,這些日志還可能用于MVCC。

? ? Undo log存儲:undo log采用段的方式進行管理和記錄,存放在rollback segment回滾段中。

MVCC實現原理

概念

  • 當前讀:讀取的是記錄的最新版本,讀取時還要保證其他并發事務不能修改當前記錄,會對讀取的記錄進行加鎖。
  • 快照讀:簡單的select(不加鎖)就是快照讀,讀取的是可見版本,有可能是歷史數據,不加鎖,是非阻塞讀。RC:每次select都會生成一個快照讀;RR:開啟事務后的第一個select語句就是快照讀的地方;S:快照讀變成當前讀
  • MVCC:Multi-Version Concurrency Control,多版本并發控制。指維護一個數據的多個版本,使得讀寫操作沒有沖突,快照讀為MySQL實現MVCC提供了一個非阻塞讀的功能。具體實現還依賴數據庫中的三個隱藏字段、undo log、readView。

隱藏字段

  • DB_TRX_ID:最近修改事務id,記錄插入這條記錄或最后一次修改該記錄的事務id。
  • DB_ROLL_PTR:回滾指針,指向這條記錄的上一個版本,用于配合undo log,指向上一個版本。
  • DB_ROW_ID:隱藏主鍵,如果表結構沒有指定主鍵,將會生成該隱藏字段

undo log版本鏈

? ? 用 Undo Log 將一條記錄的多個歷史版本串聯起來,形成一個基于ROLL_PTR(回滾指針)的鏈表結構。

? ? 這個鏈表使得數據庫能夠“回到過去”,找到記錄在某個特定時間點的狀態。

readview

? ? Readview是快照讀SQL執行時MVCC提取數據的依據,記錄并維護系統當前活躍(未提交)事務的id。包含四個核心字段:

  • m_ids:當前活躍事務的id集合
  • min_trx_id:最小活躍事務id
  • max_trx_id:預分配事務id,當前最大事務id+1
  • creator_trx_id:Readview創建者的事務id

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96077.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96077.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96077.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

光伏項目無人機踏勘--如何使用無人機自動航線規劃APP

手機號免費注冊iSolarBP,一起來學習吧,注冊獲取無人機航線規劃APP https://isolar-bp.sungrowplant.com/isolarbp#/login?qrcodeId1952928161454551042https://isolar-bp.sungrowplant.com/isolarbp#/login?qrcodeId1952928161454551042 登錄--下載航…

優先搜索(DFS)實戰

目錄 一、DFS通用解題思路 二、逐題拆解 三、四題對比 四、總結:DFS解決矩陣問題的“萬能模板” 在算法解題中,矩陣連通性問題是高頻考點,而深度優先搜索(DFS)是解決這類問題的核心工具之一。它通過“一條路走到…

門控MLP(Qwen3MLP)與稀疏混合專家(Qwen3MoeSparseMoeBlock)模塊解析

Qwen3MLP Qwen3MLP是基于門控機制的MLP模塊,采用了類似門控線性單元(GLU)的結構。它通過三個線性變換層(gate_proj、up_proj和down_proj)和SiLU激活函數,先將輸入從隱藏維度擴展到中間維度,經過…

產線相機問題分析思路

現象:復現問題 原因:問題分析、溯源,定位根本原因; 方案:提出解決方案、規避措施 驗證:導入、驗證方案是否可行(先小批量、再大批量);一. 現象產線反饋4pcs預覽又臟污、劃…

【開關電源篇】EMI輸入電路-超簡單解讀

1. 輸入電路主要包含哪些元件?濾波設計需遵循什么原則? 輸入電路是電子設備(如開關電源)的“入口”,核心作用是抑制電磁干擾(EMI)、保護后級電路,其設計直接影響設備的穩定性和電磁…

勝券POS:打造智能移動終端,讓零售智慧運營觸手可及

零售企業運營中依然存在重重挑戰:收銀臺前的長隊消磨著顧客的耐心,倉庫里的庫存盤點不斷侵蝕著員工的精力,導購培訓的成本長期居高不下卻收效甚微……面對這些痛點,零售企業或許都在等待一個破局的答案。百勝軟件勝券POS&#xff…

(回溯/組合)Leetcode77組合+39組合總和+216組合總和III

為什么不能暴力,因為不知道要循環多少次,如果長度為n,難道要循環n次么,回溯的本質還是暴力,但是是可以知道多少層的暴力 之所以要pop是因為回溯相當于一個樹形結構,要pop進行第二個分支 剪枝:…

07 下載配置很完善的yum軟件源

文章目錄前言ping 測試網絡排查原因排查虛擬機的虛擬網絡是否開啟檢查net8虛擬網絡和Centos 7的ip地址是否在一個局域網點擊虛擬網絡編輯器點擊更改設置記錄net8的虛擬網絡地址ip a記錄Centos 7的ip地址比較net8和Centos 7的ip地址是否在一個網段解決問題問題解決辦法修改net8的…

SpringBoot中添加健康檢查服務

問題 今天需要給一個Spring工程添加健康檢查。 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency>application.yml management:endpoints:web:e…

AI工具深度測評與選型指南 - AI工具測評框架及方法論

目錄引言&#xff1a;AI工具爆發期的機遇與挑戰一、從AI模型到AI工具&#xff1a;核心認知與生態解析1.1 DeepSeek&#xff1a;快速出圈的國產大模型代表1.2 大模型的核心能力與類型劃分1.2.1 大模型的三層能力與“雙系統”類比1.2.2 生成模型與推理模型的核心差異1.3 AI工具與…

Spring Cloud Alibaba快速入門02-Nacos(中)

文章目錄實現注冊中心-服務發現模擬掉線遠程調用1.訂單和商品模塊的接口商品服務訂單服務2.抽取實體類3.訂單服務拿到需要調用服務的ip和端口負載均衡步驟1步驟2步驟3步驟4面試題&#xff1a;注冊中心宕機&#xff0c;遠程調用還能成功嗎&#xff1f;1、調用過;遠程調用不在依賴…

【Python】數據可視化之熱力圖

熱力圖&#xff08;Heatmap&#xff09;是一種通過顏色深淺來展示數據分布、密度和強度等信息的可視化圖表。它通過對色塊著色來反映數據特征&#xff0c;使用戶能夠直觀地理解數據模式&#xff0c;發現規律&#xff0c;并作出決策。 目錄 基本原理 sns.heatmap 代碼實現 基…

如何 正確使用 nrm 工具 管理鏡像源

目錄 nrm 是啥&#xff1f; nrm 的安裝 查看你當前已有的鏡像源 怎么切換到目標鏡像源 添加鏡像源 刪除鏡像源 測試鏡像源速度 nrm 是啥&#xff1f; 鏡像源&#xff1a;可以理解為&#xff0c;你訪問或下載某jar包或依賴的倉庫。 nrm&#xff08;Node Registry Manag…

關于對逾期提醒的定時任務~改進完善

Spring Boot 中實現到期提醒任務的定時Job詳解在金融或借貸系統中&#xff0c;到期提醒是常見的功能需求。通過定時任務&#xff0c;可以定期掃描即將到期的借款記錄&#xff0c;并生成或更新提醒信息。本文基于提供的三個JobHandler類&#xff08;FarExpireRemindJob、MidExpi…

springboot配置請求日志

springboot配置請求日志 一般情況下&#xff0c;接口請求都需要日志記錄&#xff0c;Java springboot中的日志記錄相對復雜一點 經過實踐&#xff0c;以下方案可行&#xff0c;記錄一下完整過程 一、創建日志數據模型 創建實體類&#xff0c;也就是日志文件中要記錄的數據格式 …

Redis(50) Redis哨兵如何與客戶端進行交互?

Redis 哨兵&#xff08;Sentinel&#xff09;不僅負責監控和管理 Redis 主從復制集群的高可用性&#xff0c;還需要與客戶端進行有效的交互來實現故障轉移后的透明連接切換。下面詳細探討 Redis 哨兵如何與客戶端進行交互&#xff0c;并結合代碼示例加以說明。 哨兵與客戶端的交…

【.Net技術棧梳理】04-核心框架與運行時(線程處理)

文章目錄1. 線程管理1.1 線程的核心概念&#xff1a;System.Threading.Thread1.2 現代線程管理&#xff1a;System.Threading.Tasks.Task 和 Task Parallel Library (TPL)1.3 狀態管理和異常處理1.4 協調任務&#xff1a;async/await 模式2. 線程間通信2.1 共享內存與競態條件2…

(JVM)四種垃圾回收算法

在 JVM 中&#xff0c;垃圾回收&#xff08;GC&#xff09;是核心機制之一。為了提升性能與內存利用率&#xff0c;JVM 采用了多種垃圾回收算法。本文總結了 四種常見的 GC 算法&#xff0c;并結合其優缺點與應用場景進行說明。1. 標記-清除&#xff08;Mark-Sweep&#xff09;…

論文閱讀:VGGT Visual Geometry Grounded Transformer

論文閱讀&#xff1a;VGGT: Visual Geometry Grounded Transformer 今天介紹一篇 CVPR 2025 的 best paper&#xff0c;這篇文章是牛津大學的 VGG 團隊的工作&#xff0c;主要圍繞著 3D 視覺中的各種任務&#xff0c;這篇文章提出了一種多任務統一的架構&#xff0c;實現一次輸…

python編程:一文掌握pypiserver的詳細使用

更多內容請見: python3案例和總結-專欄介紹和目錄 文章目錄 一、 pypiserver 概述 1.1 pypiserver是什么? 1.2 核心特性 1.3 典型應用場景 1.4 pypiserver優缺點 二、 安裝與基本使用 2.1 安裝 pypiserver 2.2 快速啟動(最簡模式) 2.3 使用私有服務器安裝包 2.4 向私有服務…