數據庫學習------數據庫事務的特性

????????在數據庫操作中,事務是保證數據一致性和完整性的核心機制。無論是簡單的單表更新,還是復雜的多表關聯操作,事務都扮演著至關重要的角色。

? ? ? ?那么什么是數據庫事務?數據庫事務是一個不可分割的操作序列,它包含一個或多個數據庫操作(如插入、更新、刪除等),這些操作要么全部執行成功,要么全部執行失敗,不存在部分成功的情況。事務就像一個 “打包” 的操作集合,確保數據庫從一個一致的狀態轉換到另一個一致的狀態。?例如,在銀行轉賬場景中,“從 A 賬戶扣除 100 元” 和 “向 B 賬戶添加 100 元” 這兩個操作必須作為一個事務執行:如果前者成功而后者失敗,會導致資金憑空消失;如果前者失敗而后者成功,會導致資金憑空增加。只有兩者同時成功或同時失敗,才能保證數據的一致性。?

????????事務的核心作用是保證數據庫操作的可靠性和一致性,具體體現在以下幾個方面:?

(1)防止數據不一致:在多步操作中,避免因中間步驟失敗導致的數據錯亂(如上述轉賬案例)。?

(2)隔離并發操作:當多個用戶同時操作數據庫時,事務通過隔離級別控制不同操作之間的影響,防止臟讀(一個事務讀取了另一個未提交事務修改過的數據)、不可重復讀(在同一個事務內,多次讀取同一數據返回的結果不同,主要是因為因為其他事務修改并提交了該數據)、幻讀(在同一個事務內,多次執行相同的查詢返回不同的行集合,主要原因是其他事務新增或刪除了符合查詢條件的行并提交)等問題。?

(3)提供故障恢復能力:當數據庫發生崩潰、斷電等故障時,事務機制能通過日志等組件恢復到故障前的一致狀態。?

????????事務的特性通常用 ACID 來概括,這是事務機制的核心原理,其分別是:?

(1)原子性(Atomicity):事務中的所有操作是一個不可分割的整體,要么全部執行成功并提交,要么在某個步驟失敗時全部回滾(Rollback),不會留下部分執行的痕跡。?

(2)一致性(Consistency):事務執行前后,數據庫必須從一個一致的狀態轉換到另一個一致的狀態。例如,轉賬前 A 和 B 的賬戶總額為 1000 元,轉賬后總額仍需保持 1000 元。?

(3)隔離性(Isolation):多個事務并發執行時,每個事務的操作應與其他事務隔離開,互不干擾。數據庫通過隔離級別(如讀未提交、讀已提交、可重復讀、串行化)控制隔離程度。?

(4)持久性(Durability):一旦事務提交成功,其對數據庫的修改將永久保存,即使后續發生數據庫崩潰,修改也不會丟失。?

????????事務的 ACID 特性依賴于數據庫底層的多個組件協同實現,其中最核心的是日志系統和鎖機制:?

(1)事務日志(Transaction Log):?事務日志是保證原子性和持久性的關鍵。它記錄了事務對數據庫的所有修改操作,包括操作類型、修改前的值、修改后的值等。當事務執行時,數據庫先將操作寫入日志,再執行實際的數據修改。若執行過程中發生故障,數據庫可通過日志回滾未完成的事務(原子性);若事務已提交,即使數據未寫入磁盤,也可通過日志重新執行修改(持久性)。常見的日志類型有 undo 日志(用于回滾)和 redo 日志(用于恢復已提交事務)。?

(2)鎖機制(Locking Mechanism):?

鎖機制用于保證隔離性。當多個事務并發訪問同一數據時,數據庫通過鎖限制不同事務的操作權限。例如,讀操作可能獲取共享鎖(多個事務可同時讀取),寫操作可能獲取排他鎖(阻止其他事務讀寫),從而避免并發沖突。?

(3)MVCC(多版本并發控制):?

部分數據庫(如 MySQL InnoDB)通過 MVCC 實現高并發下的隔離性。它為數據保留多個版本,事務讀取時無需加鎖,而是訪問符合隔離級別的歷史版本,既提高了并發效率,又避免了臟讀等問題。?

????????事務的優點主要有:?

(1)保證數據一致性:通過 ACID 特性,確保復雜操作的最終結果符合預期。?

(2)簡化開發:開發者無需手動處理并發沖突和故障恢復,由數據庫自動管理。?

(3)支持故障恢復:借助日志,數據庫崩潰后可恢復到一致狀態。?

? ? ? ? 但其也有不少缺點,例如?

(1)性能開銷:事務的日志寫入、鎖機制等會增加數據庫的處理成本,尤其是長事務可能阻塞其他操作,降低并發效率。?

(2)死鎖風險:多個事務相互等待對方釋放鎖時,可能導致死鎖,需通過超時機制或手動干預解決。?

(3)復雜度提升:事務隔離級別的選擇、長事務的優化等需要開發者具備一定的數據庫知識,否則可能引發性能問題。?

????????MySQL 中,默認情況下每條 SQL 語句都是一個獨立事務(自動提交),但可通過BEGIN、COMMIT、ROLLBACK手動控制事務。

-- 開啟事務
BEGIN;-- 操作1:從A賬戶扣減100元
UPDATE account SET balance = balance - 100 WHERE id = 1;-- 操作2:向B賬戶增加100元
UPDATE account SET balance = balance + 100 WHERE id = 2;-- 檢查操作是否成功,若成功提交事務
COMMIT;-- 若操作失敗(如B賬戶不存在),回滾事務
-- ROLLBACK;

????????數據庫事務通過 ACID 特性,為復雜的數據庫操作提供了可靠的一致性保障。其底層依賴日志系統、鎖機制和 MVCC 等組件實現,廣泛應用于金融、電商等對數據準確性要求極高的場景。盡管事務會帶來一定的性能開銷和復雜度,但合理使用能顯著降低數據錯誤的風險,是數據庫開發中不可或缺的核心技術。在實際開發中,需根據業務場景選擇合適的隔離級別,避免長事務,并做好死鎖處理,以平衡數據一致性和系統性能。

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

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

相關文章

18-C語言:第19天筆記

C語言:第19天筆記 內容提要 構造類型 結構體共用體/聯合體構造類型 數據類型 基本類型/基礎類型/簡單類型 整型 短整型:short – 2字節基本整型:int – 4字節長整型:long – 32位系統4字節/ 64位系統8字節長長整型&…

centos下安裝anaconda

下載 anaconda 安裝包 wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh 2. 授權 chmod x Anaconda3-2022.05-Linux-x86_64.sh 3. 安裝 ./Anaconda3-2022.05-Linux-x86_64.sh 此時顯示Anaconda的信息,并且會出現More,繼續…

MySQL(172)如何進行MySQL的全局變量設置?

MySQL的全局變量是影響整個服務器設置和行為的參數。可以在服務器啟動時通過配置文件設置這些變量,也可以在服務器運行時通過SQL命令動態調整。以下是關于如何設置和管理MySQL全局變量的詳細說明和示例代碼。 一、通過配置文件設置全局變量 在MySQL服務器啟動時&…

【最后203篇系列】030 強化學習探索

前言 我發現在csdn寫完一篇文章越來越難了,有n篇寫了一半沒往下寫。原來我覺得補完203篇,湊到一千篇是個很簡單的事,沒想到還挺難的。 我回想了一下,過去一年大模型領域繼續發生這很劇烈的變化,這是一種新的模式 &…

fastGEO v1.7.0 大更新,支持PCA、差異分析、火山圖、熱圖、差異箱線圖、去批次等分析

前言 之前一篇文章【fastGEO V1.6.1 這個版本強的可怕,GEO數據自動下載、探針注釋、Shiny App】介紹了fastGEO用于GEO數據下載和探針注釋的核心功能。 雖然是付費50獲取安裝包(剛開始是20),但也深受歡迎,說明這個R包…

LLM 典型模型技術特性及項目落地全流程實踐

在大語言模型(LLM)技術快速迭代的當下,開發者面臨的核心挑戰已從 “是否使用” 轉變為 “如何正確選型并高效落地”。本文將系統剖析當前主流 LLM 的技術特性,結合實際項目架構,提供從模型選型、接口集成到性能優化的全流程技術方案,并附關鍵代碼實現,為工業級 LLM 應用…

機器學習消融實驗:方法論演進、跨領域應用與前沿趨勢

一、定義與起源 消融實驗(Ablation Study)是一種系統性移除或修改模型關鍵組件以評估其對整體性能貢獻的實驗方法論。其術語源于神經科學和實驗心理學(20世紀60-70年代),指通過切除動物腦區研究行為變化的實驗范式。2…

北京-4年功能測試2年空窗-報培訓班學測開-今天來聊聊我的痛苦

最近狀態很不對勁,因為我很少花時間好好思考,只是處于執行狀態,甚至也不太寫筆記了,我原以為這樣會更高效,現在想想,開始不愿花時間深思才是斷弦的開始吧而且從結課后我有了隱瞞,我不想過多透露…

深度解析 | AI 幻覺的形成和應對路徑

寫這一篇的緣由一是因為我也在摸索如何降低 AI 幻覺提升 AI 工具使用效率,二是因為前兩周在MIT學習時老師講的一節課,剛好也解釋了這個問題,所以一并做個總結,分享給大家。 近幾年,大型語言模型(LLM&#…

Java把word轉HTML格式

Java把word轉HTML格式&#xff0c;兩種方式方式一&#xff1a;maven引入依賴,pom.xml<dependency><groupId>e-iceblue</groupId><artifactId>spire.office.free</artifactId><version>5.3.1</version> </dependency>然后代碼讀…

#C語言——學習攻略:探索字符函數和字符串函數(一)--字符分類函數,字符轉換函數,strlen,strcpy,strcat函數的使用和模擬實現

&#x1f31f;菜鳥主頁&#xff1a;晨非辰的主頁 &#x1f440;學習專欄&#xff1a;《C語言學習》 &#x1f4aa;學習階段&#xff1a;C語言方向初學者 ?名言欣賞&#xff1a;"編程的本質是理解問題&#xff0c;然后把它分解成可執行的步驟。" 目錄 1. 字符分類函…

(吃飯)質數時間

題目描述如果把一年之中的某個時間寫作 a 月 b 日 c 時 d 分 e 秒的形式&#xff0c;當這五個數都為質數時&#xff0c;我們把這樣的時間叫做質數時間&#xff0c;現已知起始時刻是 2022 年的 a 月 b 日 c 時 d 分 e 秒&#xff0c;終止時刻是 2022 年的 u 月 v 日 w 時 x 分 y…

【RK3568 RTC 驅動開發詳解】

RK3568 RTC 驅動開發詳解一、Linux RTC 子系統架構?二、設備樹配置?三、驅動四、時間相關命令實時時鐘&#xff08;RTC&#xff09;是嵌入式系統中不可或缺的硬件模塊&#xff0c;負責在系統斷電后繼續計時&#xff0c;為設備提供穩定的時間基準。本文將以瑞芯微 RK3568 平臺…

文本編碼檢測庫`chardet` 和 `uchardet`對比使用示例及注意事項

在處理未知編碼的二進制數據時&#xff0c;chardet 和 uchardet 是兩個非常實用的字符編碼自動檢測庫&#xff0c;尤其適用于從衛星通信、文件、網絡流等來源獲取的未標明編碼的文本數據。一、chardet&#xff08;Python版&#xff09; ? 簡介 chardet 是一個用 Python 編寫的…

[Windows]Postman-app官方歷史版本下載方法

Postman-app官方歷史版本下載方法最新版&歷史版本官網地址最新版本下載歷史版本下載禁止自動更新方法Postman最新版安裝后必須要登錄才能使用某些特定功能&#xff0c;多有不便&#xff0c;因此花了點時間整理了一下歷史版本如何下載的方法&#xff0c;鏈接均為官網鏈接&am…

【Spring Boot 快速入門】三、分層解耦

目錄分層解耦案例&#xff1a;將 emp.xml 中的數據解析并響應三層架構分層解耦IOC & DI 入門IOC 詳解DI 詳解分層解耦 案例&#xff1a;將 emp.xml 中的數據解析并響應 emp.xml 內容如下&#xff1a; <emps><emp><name>Tom</name><age>18…

井云科技2D交互數字人:讓智能服務觸手可及的實用方案

在如今的數字化時代&#xff0c;智能交互已成為各行業提升服務質量的重要方向。而井云 2D 交互數字人系統憑借其獨特的技術優勢&#xff0c;正逐漸成為眾多企業實現智能服務升級的優選。它無需復雜的操作和高昂的成本&#xff0c;就能讓數字人在各類線下場景中發揮重要作用&…

本地部署VMware ESXi,并實現無公網IP遠程訪問管理服務器

ESXi&#xff08;VMware ESXi&#xff09;是VMware公司推出的一款企業級虛擬化平臺&#xff0c;基于裸機&#xff08;bare-metal&#xff09;安裝的虛擬化操作系統。它可以在一臺物理服務器上運行多個虛擬機&#xff0c;廣泛應用于數據中心和云計算環境中。很多公司為了方便管理…

讓科技之光,溫暖銀齡歲月——智紳科技“智慧養老進社區”星城國際站溫情紀實

七月的風&#xff0c;帶著夏日的熱情&#xff0c;輕輕拂過邯鄲星城國際社區蔥郁的綠意。2025年7月30日&#xff0c;一個以“幸福晚景&#xff0c;樂享銀齡—智慧養老進社區”為主題的活動&#xff0c;如一股暖流&#xff0c;浸潤了社區的長者們。智紳科技懷揣著“科技賦能養老&…

Java單元測試和設計模式

單元測試 . 測試分類 什么是測試? 測試的目的是盡可能多的發現軟件中存在的BUG,而不是為了隱藏BUG。事實上測試有很多種類,比如:邊界測試,壓力測試,性能測試等 黑盒測試 黑盒測試也叫功能測試,主要關注軟件每個功能是否實現,并不關注軟件代碼是否有錯誤;測試人員…