事務的4個特性和4個隔離級別

事務的4個特性和4個隔離級別

    • 1. 什么是事務
    • 2. 事務的ACID特性
      • 2.1 原子性
      • 2.2 一致性
      • 2.3 持久性
      • 2.4 隔離性
    • 3. 事務的創建
    • 4. 事務并發時出現的問題
      • 4.1 DIRTY READ 臟讀
      • 4.2 NON - REPEATABLR READ 不可重復讀
      • 4.3 PHANTOM READ 幻讀
    • 5. 事務的隔離級別
      • 5.1 READ UNCOMMITTED 讀未提交
      • 5.2 READ COMMITTD 讀已提交
      • 5.3 REPEATABLE 可重復讀
      • 5.4 SERIALIZABLE 串行化

1. 什么是事務

事務,簡單來說,就是將一組SQL語句組合成一個邏輯單元,這些語句要么全部成功執行,使數據庫狀態發生預期的改變;要么全部失敗,數據庫回滾到事務開始前的狀態,仿佛這組操作從未發生過。

以日常生活中的轉賬場景為例,當A向B轉賬100元時,“A賬戶減少100元”和“B賬戶增加100元”這兩個操作必須作為一個整體來執行,要么都成功完成轉賬,要么因為任何原因(如余額不足、網絡故障等)都不執行,以保證資金的準確性和一致性。這,就是一個典型的事務。

2. 事務的ACID特性

事務之所以能可靠地管理數據,離不開其具有的四大特性:原子性(Atomicity)、一致性(Consistency)、持久性(Durability)和隔離性(Isolation),簡稱為ACID特性。

2.1 原子性

原子性確保事務是一個不可分割的最小工作單元。就像化學反應中的原子一樣,事務中的所有操作要么一起成功,將數據持久化到數據庫;要么一起失敗,數據庫狀態回滾到事務開始之前,不會出現部分操作成功、部分操作失敗的中間狀態。

2.2 一致性

一致性要求事務執行前后,數據庫的完整性約束沒有被破壞,數據必須符合業務邏輯和預先設定的規則。例如,在轉賬事務中,轉賬前后的賬戶總金額應該保持不變,這是保證數據一致性的基本體現。

2.3 持久性

一旦事務被成功提交,其所做的修改就會永久性地保存在數據庫中。即使后續系統發生故障,如硬件損壞、軟件崩潰或斷電等,已提交的數據也不會丟失,確保了數據的可靠性和穩定性。

2.4 隔離性

隔離性使得多個并發事務在執行時,相互之間不會產生干擾,每個事務都像是在獨立運行。不同的隔離級別決定了事務之間的隔離程度,以及可能出現的并發問題,這將在后續詳細討論。

3. 事務的創建

在SQL語言中,我們可以通過以下語句來靈活地控制事務:

-- 開啟一個新的事務,兩種方式均可
START TRANSACTION;
-- 或者
BEGIN;-- 當事務中的所有操作都順利完成,使用此語句提交事務,將修改永久保存到數據庫
COMMIT;-- 如果在事務執行過程中出現錯誤或需要回滾操作,執行此語句取消已執行的所有修改
ROLLBACK;

4. 事務并發時出現的問題

當多個事務同時并發執行時,由于事務之間的相互影響,可能會出現以下幾種常見的問題:

4.1 DIRTY READ 臟讀

臟讀是指一個事務讀取到了另一個事務尚未提交的數據。如果未提交事務隨后回滾,那么讀取到的數據就是無效的,這可能導致數據的不一致和錯誤的業務決策。

4.2 NON - REPEATABLR READ 不可重復讀

不可重復讀是指在同一個事務中,多次讀取同一數據時,由于其他事務在期間對數據進行了修改并提交,導致每次讀取的結果不一致。這會給需要在事務中多次讀取相同數據進行業務處理的場景帶來困擾。

4.3 PHANTOM READ 幻讀

幻讀是指一個事務在執行過程中,發現另一個事務插入了新的數據,導致該事務再次讀取數據時,出現了之前不存在的記錄,仿佛產生了“幻覺”。例如在電商下單場景中,用戶點擊立即購買成功進入下單頁面,準備付款時卻顯示庫存不足,這就是幻讀的一個典型例子。

5. 事務的隔離級別

為了解決事務并發執行時出現的上述問題,數據庫提供了不同的隔離級別,每個隔離級別對并發事務的處理方式和所能避免的問題各不相同。常見的隔離級別有以下4種:

5.1 READ UNCOMMITTED 讀未提交

這是最低的隔離級別,允許一個事務讀取另一個事務尚未提交的數據。由于此級別幾乎沒有任何隔離措施,所以可能會出現臟讀、不可重復讀和幻讀等各種并發問題,在實際應用中較少使用。

5.2 READ COMMITTD 讀已提交

大多數數據庫系統的默認隔離級別。在該級別下,一個事務只能讀取其他事務已經提交的數據,可以有效避免臟讀問題,但仍然可能出現不可重復讀和幻讀。

5.3 REPEATABLE 可重復讀

MySQL的默認隔離級別。在此級別下,同一個事務內多次讀取相同數據時,數據保持一致,能夠避免臟讀和不可重復讀。然而,對于幻讀問題,雖然在一定程度上得到了緩解,但并不能完全杜絕。

5.4 SERIALIZABLE 串行化

這是最高的隔離級別,事務會按照順序依次執行,完全避免了臟讀、不可重復讀和幻讀等所有并發問題。但由于事務串行執行,并發性能較低,適用于對數據一致性要求極高、并發量較低的場景。

通過下面的圖片,可以更直觀地了解不同隔離級別與并發問題之間的關系:

理解事務的概念、特性、操作以及并發問題和隔離級別,對于開發高效、可靠的數據庫應用至關重要。在實際項目中,我們需要根據業務需求和系統性能要求,合理選擇事務的隔離級別,以平衡數據一致性和并發性能之間的關系。

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

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

相關文章

LeetCode熱題100- 字符串解碼【JavaScript講解】

古語有云:“事以密成,語以泄敗”! 關于字符串解碼: 題目:題解:js代碼:代碼中遇到的方法:repeat方法:為什么這里不用this.strstack.push(result)? 題目&#x…

水利工程安全包括哪幾個方面

水利工程安全培訓的內容主要包括以下幾個方面: 基礎知識和技能培訓 : 法律法規 :學習水利工程相關的安全生產法律法規,了解安全生產標準及規范。 事故案例 :通過分析事故案例,了解事故原因和教訓&#x…

淺談新能源汽車充電樁建設問題分析及解決方案

摘要: 在全球倡導低碳減排的大背景下,新能源成為熱門行業在全球范圍內得以開展。汽車尾氣排放會在一定程度上加重溫室效應,并且化石能源的日漸緊缺也迫切對新能源汽車發展提出新要求。現階段的新能源汽車以電力汽車為主,與燃油汽…

05-1基于vs2022的c語言筆記——運算符

目錄 前言 5.運算符和表達式 5-1-1 加減乘除運算符 1.把變量進行加減乘除運算 2.把常量進行加減乘除運算 3.對于比較大的數(往數軸正方向或者負方向),要注意占位符的選取 4.浮點數的加減乘除 5-1-2取余/取模運算符 1.基本規則 2.c語…

ubuntu:換源安裝docker-ce和docker-compose

更新apt源 apt換源:ubuntu:更新阿里云apt源-CSDN博客 安裝docker-ce 1、更新軟件源 sudo apt update2、安裝基本軟件 sudo apt-get install apt-transport-https ca-certificates curl software-properties-common lrzsz -y3、指定使用阿里云鏡像 su…

0—QT ui界面一覽

2025.2.26,感謝gpt4 1.控件盒子 1. Layouts(布局) 布局控件用于組織界面上的控件,確保它們的位置和排列方式合理。 Vertical Layout(垂直布局) :將控件按垂直方向排列。 建議:適…

Apache Doris 索引的全面剖析與使用指南

搞大數據開發的都知道,想要在海量數據里快速查數據,就像在星圖里找一顆特定的星星,賊費勁。不過別慌,數據庫索引就是咱們的 “定位神器”,能讓查詢效率直接起飛!就拿 Apache Doris 這個超火的分析型數據庫來…

docker file中ADD命令的介紹

在 Docker 的世界里,Dockerfile 是一個用于定義鏡像內容和行為的腳本文件。其中,ADD 指令是 Dockerfile 中一個非常重要的命令,用于將文件或目錄從主機文件系統復制到容器的文件系統中。本文將詳細介紹 ADD 指令的作用、使用方式以及一些最佳…

從零到一:如何用阿里云百煉和火山引擎搭建專屬 AI 助手(DeepSeek)?

本文首發:從零到一:如何用阿里云百煉和火山引擎搭建專屬 AI 助手(DeepSeek)? 阿里云百煉和火山引擎都推出了免費的 DeepSeek 模型體驗額度,今天我和大家一起搭建一個本地的專屬 AI 助手。  阿里云百煉為 …

cpp中的繼承

一、繼承概念 在cpp中,封裝、繼承、多態是面向對象的三大特性。這里的繼承就是允許已經存在的類(也就是基類)的基礎上創建新類(派生類或者子類),從而實現代碼的復用。 如上圖所示,Person是基類&…

【QT】QLinearGradient 線性漸變類簡單使用教程

目錄 0.簡介 1)qtDesigner中 2)實際執行 1.功能詳述 3.舉一反三的樣式 0.簡介 QLinearGradient 是 Qt 框架中的一個類,用于定義線性漸變效果(通過樣式表設置)。它可以用來填充形狀、背景或其他圖形元素&#xff0…

前端項目配置 Nginx 全攻略

在前端開發中,項目開發完成后,如何高效、穩定地將其部署到生產環境是至關重要的一步。Nginx 作為一款輕量級、高性能的 Web 服務器和反向代理服務器,憑借其出色的性能和豐富的功能,成為了前端項目部署的首選方案。本文將詳細介紹在…

網絡安全學習-常見web漏洞的滲xxx透以及防護方法

滲XX透測試 弱口令漏洞 漏洞描述 目標網站管理入口(或數據庫等組件的外部連接)使用了容易被猜測的簡單字符口令、或者是默認系統賬號口令。 滲XX透測試 如果不存在驗證碼,則直接使用相對應的弱口令字典使用burpsuite 進行爆破如果存在驗證…

網絡安全 機器學習算法 計算機網絡安全機制

(一)網絡操作系統 安全 網絡操作系統安全是整個網絡系統安全的基礎。操作系統安全機制主要包括訪問控制和隔離控制。 訪問控制系統一般包括主體、客體和安全訪問政策 訪問控制類型: 自主訪問控制強制訪問控制 訪問控制措施: 入…

2025網絡安全等級測評報告,信息安全風險評估報告(Word模板)

一、概述 1.1工作方法 1.2評估依據 1.3評估范圍 1.4評估方法 1.5基本信息 二、資產分析 2.1 信息資產識別概述 2.2 信息資產識別 三、評估說明 3.1無線網絡安全檢查項目評估 3.2無線網絡與系統安全評估 3.3 ip管理與補丁管理 3.4防火墻 四、威脅細類分析 4.1威脅…

Ubuntu22.04系統安裝Anaconda、CUDA和CUDNN

之前一直在Windows系統下使用Anaconda和CUDA加速,最近需要復現一個算法,文檔里面有Linux系統conda構建環境的教程。 本篇博文參考博文,記錄自己安裝的過程,便于以后需要。 目錄 1.Anaconda1.1 安裝包下載1.2 安裝軟件1.3 更新cond…

微信小程序調用火山方舟(字節跳動火山引擎)中的DeepSeek大模型

一、注冊火山引擎賬號,創建API Key和model(接入點ID) 1.注冊并登陸火山引擎賬號,網址為:https://console.volcengine.com/ 2.根據登陸后的頁面提示進行實名認證,實名認證后才能創建API Keyt和創建接入點。…

藍橋杯之日期題

文章目錄 1.藍橋杯必備知識點2. 題型13.需求2 1.藍橋杯必備知識點 藍橋杯是一個面向全國高校計算機相關專業學生的學科競賽,涵蓋多個賽道,常見的有軟件類(如 C/C 程序設計、Java 軟件開發、Python 程序設計)和電子類(…

muduo網絡庫2

Muduo網絡庫:底層實質上為Linux的epoll pthread線程池,且依賴boost庫。 muduo的網絡設計核心為一個線程一個事件循環,有一個main Reactor負載accept連接,然后把連接分發到某個sub Reactor(采用輪詢的方式來選擇sub Reactor)&…

WinSCP 連接到 Ubuntu 虛擬機

要使用 WinSCP 連接到 Ubuntu 虛擬機,一般采用 SFTP 或 SCP 協議進行文件傳輸。以下是詳細步驟: 1. 確保虛擬機網絡可訪問 首先,你的 Ubuntu 虛擬機需要允許外部訪問: 如果使用 NAT 網絡:需要設置端口轉發&#xff0…