MySQL篇(四)事務相關知識詳解

MySQL篇(四)事務相關知識詳解

  • MySQL篇(四)事務相關知識詳解
    • 一、事務的特性(ACID)
      • 原子性(Atomicity)
      • 一致性(Consistency)
      • 隔離性(Isolation)
      • 持久性(Durability)
    • 二、并發事務帶來的問題
      • 臟讀(Dirty Read)
      • 不可重復讀(Non - repeatable Read)
      • 幻讀(Phantom Read)
    • 三、解決并發事務問題的方法
      • 讀未提交(Read Uncommitted)
      • 讀已提交(Read Committed)
      • 可重復讀(Repeatable Read)
      • 串行化(Serializable)
    • 四、MySQL的默認隔離級別
    • 五、undo log和redo log的區別
      • undo log
      • redo log
    • 六、MySQL中的MVCC(多版本并發控制)

MySQL篇(四)事務相關知識詳解

一、事務的特性(ACID)

原子性(Atomicity)

原子性是指事務是一個不可分割的工作單位,事務中的操作要么全部執行,要么全部不執行。比如在銀行轉賬中,從一個賬戶扣款和向另一個賬戶存款這兩個操作必須同時成功或者同時失敗,不能只執行其中一個操作 ,確保了數據的完整性和一致性。

一致性(Consistency)

一致性是指事務執行前后,數據庫的完整性約束沒有被破壞 。例如轉賬前后,兩個賬戶的總金額應該保持不變。它關注的是業務邏輯上的正確性,通過原子性、隔離性和持久性來保證。

隔離性(Isolation)

隔離性是指多個事務并發執行時,一個事務的執行不能被其他事務干擾。不同的隔離級別決定了事務之間相互干擾的程度,比如在高并發場景下,多個事務同時操作相同數據時,隔離性可以防止數據出現臟讀、不可重復讀、幻讀等問題。

持久性(Durability)

持久性是指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的,接下來的其他操作或故障不應該對其執行結果有任何影響 。例如轉賬成功提交事務后,即使系統崩潰,轉賬的結果依然存在。

二、并發事務帶來的問題

臟讀(Dirty Read)

一個事務讀取到了另一個事務尚未提交的數據。比如事務A修改了某條記錄但未提交,此時事務B讀取了這條被修改但未提交的記錄,如果事務A回滾,事務B讀取到的數據就是無效的臟數據。

不可重復讀(Non - repeatable Read)

在一個事務內多次讀取同一數據時,由于其他事務對該數據進行了修改并提交,導致在本事務中多次讀取的數據不一致。例如事務A讀取某條記錄,然后事務B修改并提交了這條記錄,事務A再次讀取時得到了不同的值。

幻讀(Phantom Read)

在一個事務中執行查詢操作,在事務執行過程中,由于其他事務插入了新的數據,當該事務再次執行相同的查詢時,結果集發生了變化,就好像產生了“幻影”數據。比如事務A查詢符合某條件的記錄,事務B插入了符合該條件的新記錄并提交,事務A再次查詢時就會發現多了一些記錄。

三、解決并發事務問題的方法

通過設置不同的事務隔離級別來解決并發事務問題:

讀未提交(Read Uncommitted)

最低的隔離級別,允許讀取未提交的數據,會導致臟讀、不可重復讀和幻讀問題,一般很少使用。

讀已提交(Read Committed)

一個事務只能讀取其他事務已經提交的數據。可以避免臟讀,但仍然可能出現不可重復讀和幻讀問題,是大多數數據庫的默認隔離級別(MySQL默認不是這個 )。

可重復讀(Repeatable Read)

在一個事務內的多次讀取操作會返回相同的數據,即使其他事務對數據進行了修改并提交。可以避免臟讀和不可重復讀,但在某些情況下仍可能存在幻讀問題。MySQL的默認隔離級別是可重復讀,通過MVCC(多版本并發控制)機制在一定程度上解決了幻讀問題。

串行化(Serializable)

最高的隔離級別,事務會按照順序依次執行,就像單線程環境一樣,能避免臟讀、不可重復讀和幻讀的所有問題,但并發性能較差。

四、MySQL的默認隔離級別

MySQL的默認隔離級別是可重復讀(Repeatable Read) 。在這種隔離級別下,MySQL通過MVCC機制來實現事務的并發控制。MVCC為每個事務維護一個一致性視圖,事務在讀取數據時,根據這個視圖來判斷數據的可見性,從而在保證數據一致性的同時提高并發性能。

五、undo log和redo log的區別

undo log

undo log主要用于事務的回滾操作。當事務執行過程中需要回滾時,undo log可以記錄數據修改前的版本信息,通過這些信息將數據恢復到事務開始前的狀態。同時,undo log在MVCC機制中也起到重要作用,用于構建一致性視圖,提供舊版本數據的可見性判斷依據。

redo log

redo log主要用于保障事務的持久性。在事務提交時,先將事務的修改操作記錄到redo log中,然后再將數據真正寫入磁盤。當數據庫發生崩潰恢復時,可以根據redo log中的記錄將數據恢復到事務提交后的狀態,確保已提交事務的數據不會丟失。

六、MySQL中的MVCC(多版本并發控制)

MVCC是一種用于實現數據庫并發控制的機制,它通過為數據庫中的每行數據維護多個版本來實現事務的并發執行。在MySQL的InnoDB存儲引擎中:

  • 實現原理:MVCC為每行數據記錄多個版本,每個版本包含事務ID等信息。當事務讀取數據時,根據事務的開始時間戳和數據版本的事務ID來判斷數據是否可見。如果數據版本的事務ID小于當前事務的開始時間戳,那么該版本數據對當前事務可見;否則不可見。
  • 作用:MVCC可以在不使用鎖(或減少鎖的使用)的情況下,實現事務的并發讀取,提高了數據庫的并發性能,同時在可重復讀隔離級別下,配合undo log有效解決了臟讀、不可重復讀問題,并在一定程度上緩解了幻讀問題。

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

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

相關文章

SpringBoot定時任務深度優化指南

精心整理了最新的面試資料和簡歷模板,有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 SpringBoot定時任務深度優化指南 引言 在分布式系統架構中,定時任務是實現業務邏輯自動化的重要組件。SpringBoot通過Scheduled注解提供了便捷的…

MySQL表結構導出(Excel)

目錄 一、java實現MySQL表結構導出(Excel) 二、python實現MySQL表結構導出(Excel) 又到了寫畢設的時候了,計算機專業在寫論文第四章系統設計的時候肯定會遇到和我一樣的難題——要在論文中將數據庫的表結構以表格形式…

Android使用OpenGL和MediaCodec渲染視頻

目錄 一,借助MediaCodec封裝解碼工具類VideoCodec 二,使用OpenGl繪制視頻封裝SoulFilter 一,借助MediaCodec封裝解碼工具類VideoCodec /*** 解碼工具類* 解碼完成后的數據 通過 ISurface 回調出去*/ public class VideoCodec {private ISu…

day39——輸入操作:多值輸入

數組輸入&#xff1a; int main() {//***** 1、多值輸入&#xff08;C&#xff09;/*輸入&#xff1a;3 --> 3個值5 4 9*/int n;cin >> n; //輸入個數const int MAX_SIZE 0xFFFF;//限定最大個數int a[MAX_SIZE];for (int i 0; i < n; i) {//用 n 作控制輸入…

第九課:LoRA模型的原理及應用

文章目錄 Part.01 3種LoRA的使用方式Part.02 5種LoRA的應用方向Part.01 3種LoRA的使用方式 LoRA能夠在家用級設備上訓練,實現對Checkpoint在某些方面的微調使用Lora的三種方式:放置Lora模型到目錄中,然后作為提示詞的一部分輸入。點擊生成按鈕下面的“畫”,然后打開Additio…

Cortex-M3 NVIC可以控制異常向量表的哪些部分

Cortex-M3 的 NVIC(嵌套向量中斷控制器)不直接控制整個異常向量表,但可以管理向量表中與中斷相關的部分行為。以下是 NVIC 對異常向量表的具體控制范圍和相關機制: 1. NVIC 直接控制的部分 NVIC 主要管理 外部中斷(IRQ) 和部分 系統異常 的行為,但對向量表本身的存儲位…

雙向鏈表增刪改查的模擬實現

本章目標 0.雙向鏈表的基本結構 1.雙向鏈表的初始化 2.頭插尾插 3.頭刪尾刪 4.查找與打印 5.在指定位置之前插入數據/在指定位置之后插入數據 6.在指定位置之前刪除數據/在指定位置之后刪除數據 7.銷毀鏈表 0.雙向鏈表的基本結構 本章所實現的雙向鏈表是雙向循環帶頭鏈表,是…

實戰交易策略 篇十四:江南神鷹捕捉熱點和熊市生存交易策略

文章目錄 系列文章捕捉熱點是股市最大的掘金術市場溫度不低于50是熱點產生的必要條件題材的大小和新穎程度決定熱點的持續時間和漲幅炒作熱點的3個階段捕捉熱點的方法與步驟操作實戰案例熊市生存術“熊市最好的做法是離開股市”的說法是一句空話熊市盈利模式:不輕言底部,超跌…

Linux錯誤(6)X64向量指令訪問地址未對齊引起SIGSEGV

Linux錯誤(6)X64向量指令訪問地址未對齊引起SIGSEGV Author: Once Day Date: 2025年4月4日 一位熱衷于Linux學習和開發的菜鳥&#xff0c;試圖譜寫一場冒險之旅&#xff0c;也許終點只是一場白日夢… 漫漫長路&#xff0c;有人對你微笑過嘛… 全系列文章可參考專欄: Linux實…

解碼 __iter__ 和 itertools.islice - 迭代的藝術

文章目錄 前言一、`_iter__`:自定義迭代的鑰匙1.1 什么是 __iter__?1.2 基本用法1.3 高級用法:獨立迭代器二、itertools.islice:迭代切片的利器2.1 什么是 itertools.islice?2.2 基本用法2.3 處理無限序列2.4 實際應用三、`__iter__` 與 `islice` 的結合六、為什么需要它們…

使用VSCode編寫C#程序

目錄 一、環境搭建&#xff1a;構建高效開發基礎1. 安裝VSCode2. 配置.NET SDK3. 安裝核心擴展 二、項目開發全流程1. 創建項目2. 代碼編輯技巧3. 調試配置4. 高級調試技巧5. 編譯與運行 三、常見問題解決指南1. 項目加載失敗2. IntelliSense失效3. 代碼格式化4. 典型編譯錯誤&…

日本汽車規模性經濟計劃失敗,日產三大品牌的合并合作共贏,還是絕地求生?本田與日產合并確認失敗,將成為世界第三大汽車集團愿景失敗

本田與日產(含三菱汽車)的合并計劃最終因核心矛盾無法調和而宣告失敗,這一事件揭示了傳統車企在行業變革期的深層困境。以下從合并動機、失敗原因、本質判斷及未來影響等方面綜合分析: 一、合并的初衷:生存壓力主導的被動策略 市場危機與財務困境 中國市場潰敗:日系品牌在…

AutoCAD2026中文版下載安裝教程

AutoCAD是一款由Autodesk公司開發的計算機輔助設計軟件&#xff0c;被廣泛應用于建筑設計、機械設計、電氣設計、土木工程、裝飾裝潢等多個領域。AutoCAD2026中文版在原有的基礎上進行了多項改進和優化&#xff0c;為用戶提供了更為高效、便捷的繪圖和設計體驗。這里我給大家分…

Latex語法入門之數學公式

Latex是一種高質量的排版系統&#xff0c;尤其擅長于數學公式的排版。本文我將帶大家深入了解Latex在數學公式排版中的應用。從基礎的數學符號到復雜的公式布局&#xff0c;我們都會一一講解&#xff0c;通過本文的學習&#xff0c;你將能夠輕松編寫出清晰、美觀的數學公式&…

洛谷 P3214 [HNOI2011] 卡農

題目傳送門 前言 再次敗在 d p dp dp 手下&#xff0c;但是數據范圍這么小應該是可以看出是 d p dp dp 的&#xff08;畢竟對于其他組合數的問題數據范圍都是 1 0 9 10^9 109 起步&#xff09;。 思路 題意簡化 現有 1 , 2 , 3 , . . . , n ? 1 , n 1, 2, 3, ... , n -…

【年份數據類型及使用】

在數據分析中,年份的處理需要根據具體場景選擇合適的數據類型,以確保后續分析的準確性和效率。以下是常見的年份數據類型及使用場景: 1. 數值類型(整數或浮點數) 適用場景: 僅需存儲年份數值(如 2020, 2023),無需進行日期計算。需要將年份作為連續變量參與數學運算(如…

詳解七大排序

目錄 一.直接插入排序 &#xff08;1&#xff09;基本思想 &#xff08;2&#xff09;算法步驟 &#xff08;3&#xff09;代碼實現 &#xff08;4&#xff09;算法特性 &#xff08;5&#xff09;算法優化 &#xff08;6&#xff09;示例演示 二.希爾排序 &#xff08…

YOLOv12 訓練從這里開始:LabelImg 標注數據集

視頻講解&#xff1a; YOLOv12 訓練從這里開始&#xff1a;LabelImg 標注數據集 labelimg https://github.com/tzutalin/labelImg sudo apt-get install pyqt5-dev-tools pip3 install lxml git clone https://github.com/tzutalin/labelImg.git cd labelImg 開始編譯 make…

Day2:前端項目uniapp壁紙實戰

先來做一個輪番圖。 效果如下&#xff1a; common-style.css view,swiper,swiper-item{box-sizing: border-box; } index.vue <template><view class"homeLayout"><view class"banner"><swiper circular indicator-dots autoplay…

SAP-ABAP:ABAP `LEAVE LIST-PROCESSING` 深度解析

ABAP LEAVE LIST-PROCESSING 深度解析 核心機制 模式切換(Dialog → List) 中斷屏幕流 強制終止當前Dialog程序的PBO/PAI處理,脫離屏幕序列控制(如事務碼SE38執行的程序)。觸發報表事件 激活類報表程序的事件鏈:INITIALIZATION → AT SELECTION-SCREEN → START-OF-SEL…