事務的四大特性(ACID)詳解

事務的四大特性(ACID)詳解

在數據庫管理系統(如 MySQL)中,事務(Transaction) 是指一組要么全部執行、要么全部不執行的數據庫操作,通常用于確保數據的完整性和一致性。事務有四大核心特性,即 ACID,分別是:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)

作用:
事務的 ACID 四大特性是數據庫系統用來確保數據完整性、正確性和并發一致性的核心機制。通過日志、事務隔離級別、數據庫約束等手段,數據庫可以有效解決數據一致性問題和并發問題,為數據的可靠性保駕護航。

ACID 四大特性

特性英文名稱定義常見問題及解決方法
原子性Atomicity事務中的所有操作要么全部成功,要么全部失敗并回滾。通過事務日志(Undo Log)和回滾機制實現
一致性Consistency事務執行前后,數據庫保持一致性,滿足完整性約束。通過數據庫約束、觸發器、日志來維護一致性
隔離性Isolation多個事務并發時,相互隔離,防止臟讀、不可重復讀等問題。通過事務隔離級別(如可重復讀、可序列化等)解決并發問題
持久性Durability事務一旦提交,修改將永久保存,即使系統故障也不會丟失。通過事務日志(Redo Log)、備份機制實現

1. 原子性(Atomicity)

定義:
原子性是指事務中的所有操作被視為一個整體,要么全部執行成功,要么全部失敗并回滾(rollback),不能只執行部分操作。
如果事務在執行過程中發生錯誤或出現故障,數據庫系統會將其恢復到事務開始之前的狀態,保證數據不會被部分更新。

舉例:
銀行轉賬操作:從用戶A的賬戶轉出100元并轉入用戶B的賬戶。如果只有扣款成功,而轉賬失敗,就會導致數據不一致。而原子性確保要么兩步都成功,要么兩步都不執行,保證事務的完整性。

實現方式:
通過 回滾機制(Rollback)日志(Undo Log) 來實現。


2. 一致性(Consistency)

定義:
一致性是指事務執行前后,數據庫必須處于一致的狀態。
也就是說,事務執行后,數據要滿足數據庫的完整性約束(如主鍵約束、外鍵約束、唯一性約束等)。

舉例:
假設有一個規則要求:銀行所有賬戶的總余額應該保持不變。如果在用戶A和用戶B之間轉賬后,數據庫中總余額仍然等于事務執行前的總余額,就表示事務保持了一致性。

實現方式:
通過 數據庫約束(如外鍵、觸發器)、事務日志和回滾機制 來維護一致性。


3. 隔離性(Isolation)

定義:
隔離性是指當多個事務并發執行時,一個事務的執行不應受到其他事務的影響,各事務之間相互隔離,防止并發問題(如臟讀、不可重復讀、幻讀)。

并發問題及其含義:

  • 臟讀(Dirty Read): 一個事務讀取了另一個事務未提交的數據。
  • 不可重復讀(Non-repeatable Read): 在同一事務中,兩次讀取的同一數據結果不一致,因其他事務修改了該數據。
  • 幻讀(Phantom Read): 一個事務讀取了數據集合,另一個事務在集合中插入了新數據,導致前一個事務在再次讀取時“看到”新的數據,仿佛出現了幻影。

解決方法(隔離級別):
SQL 標準定義了四種事務隔離級別,從低到高依次為:

  1. 讀未提交(Read Uncommitted): 允許臟讀、不可重復讀、幻讀。
  2. 讀已提交(Read Committed): 不允許臟讀,但可能出現不可重復讀和幻讀。
  3. 可重復讀(Repeatable Read): 禁止臟讀和不可重復讀,但可能出現幻讀(MySQL 默認級別)。
  4. 可序列化(Serializable): 提供最高隔離級別,完全防止上述問題,但降低并發性能。

4. 持久性(Durability)

定義:
持久性是指事務一旦提交,所做的修改將永久保存在數據庫中,即使系統發生故障(如斷電、宕機),數據也不會丟失。

舉例:
當用戶完成一筆銀行轉賬并提交事務后,即使系統宕機,轉賬結果也會永久保存到數據庫中。

實現方式:
通過 事務日志(Redo Log)數據庫寫盤機制備份機制 來保證事務的持久性。即使發生意外故障,數據庫可以通過日志來恢復提交的事務。


事務執行過程(一般步驟):

  1. 開啟事務
    START TRANSACTION;  
    
  2. 執行事務操作:如插入、更新或刪除操作。
    UPDATE accounts SET balance = balance - 100 WHERE id = 1;  
    UPDATE accounts SET balance = balance + 100 WHERE id = 2;  
    
  3. 提交事務(提交數據并永久保存):
    COMMIT;  
    
  4. 回滾事務(若發生錯誤,撤銷事務中的所有操作):
    ROLLBACK;  
    

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

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

相關文章

ubuntu設置開機自動運行應用

系統版本:Ubuntu 24.04.1 LTS桌面版 按招網上的資料顯示,當前版本主要的實現方式有以下兩種, 方式1:通過圖形界面的【啟動應用程序】設置開機自啟動;方式2:配置為服務實現開機自啟動。 但是在我的電腦上方…

ECharts各類炫酷圖表/3D柱形圖

一、前言 最近雞米花實現了各類的炫酷的圖表,有3D柱形圖、雙邊柱形圖以及異形柱形圖,好了,直接上圖: 二、效果圖 一個個來吧,下面就是代碼啦,注意,一下圖表展示的寬高均為800px*300px 三、異形橫…

機器人原點丟失后找回原點的解決方案與步驟

機器人原點丟失后找回原點的解決方案與步驟 在機器人運行過程中,原點丟失可能導致定位錯誤、運動失控等問題,常見于機械臂、AGV(自動導引車)、3D打印機等設備。以下是針對原點丟失問題的系統性解決方案及詳細步驟,涵蓋…

HCIP——園區網、VLAN

園區網 園區網搭建核心思路:冗余(備份)--- 保證其健壯性 1、設備冗余 2、線路冗余 3、網關冗余 4、ups(不間斷電源)冗余—— 能不斷電(物理層) 三層交換機和路由器的選擇: 三層交換…

虛擬機(二):Android 篇

虛擬機(一):Java 篇 虛擬機(二):Android 篇 Dalvik和JVM區別 Dalvik 基于寄存器,而 JVM 基于棧。 基于棧的架構具有更好的可移植性,因為其實現不依賴于物理寄存器基于棧的架構通常指…

Android Token的原理和本地安全存儲

Android Token的原理和本地安全存儲 前言 在移動應用開發中,Token是實現用戶身份驗證和授權的重要機制。本文將深入介紹Token的原理,以及在Android平臺上如何安全地存儲Token,幫助開發者構建可靠的身份驗證系統。 基礎知識 1. Token概述 1.1 Token的作用 身份驗證授權訪…

Vue Kubernetes項目 局部布局 下拉菜單

下拉菜單 [el-dropdown] 下拉菜單也比較簡單&#xff0c;就是類似于按鈕下面來一個下拉菜單。 示例Demo如下&#xff1a; <template><el-dropdown><span class"el-dropdown-link">下拉菜單<i class"el-icon-arrow-down el-icon--right&q…

Android之卡片式滑動

文章目錄 前言一、效果圖二、實現步驟1.主界面xml2.自定義的viewpage3.卡片接口類4.陰影和縮放變化類5.卡片adapter6.卡片adapter的xml7.style8.CardItem9.activity實現10.指示器drawable 總結 前言 對于這個需求&#xff0c;之前的項目也有做過&#xff0c;但是過于趕項目就沒…

(UI自動化測試web端)第二篇:元素定位的方法_css定位之css選擇器

看代碼里的【find_element_by_css_selector( )】( )里的表達式怎么寫&#xff1f; 文章介紹了第三種寫法css選擇器&#xff0c;你要根據網頁中的實際情況來判斷自己到底要用哪一種方法來進行元素定位。每種方法都要多練習&#xff0c;全都熟了之后你在工作當中使用起來元素定位…

使用vscode搭建pywebview集成vue項目示例

文章目錄 前言環境準備項目源碼下載一、項目說明1 目錄結構2 前端項目3 后端項目獲取python安裝包(選擇對應版本及系統) 三、調試與生成可執行文件1 本地調試2 打包應用 四、核心代碼說明1、package.json2、vite.config.ts設置3、main.py后端入口文件說明 參考文檔 前言 本節我…

C stm32f10x LED亮

#include<stm32f10x.h>int main(){#if 0 //APIOA 時鐘初始化unsigned int * p(unsigned int*)0x40021018;*p | 0x1<<2;//A0 推挽輸出p(unsigned int*)0x40010800;*p *p & ~0xf | 0x1;//A0低電平p(unsigned int*)0x4001080c;*p & ~0x1;#endifRCC->APB2E…

redux ,react-redux,redux-toolkit 簡單總結

Redux、React-Redux 和 Redux Toolkit 是協同工作的三個庫&#xff0c;各自承擔不同角色&#xff0c;相互協同。 Redux&#xff1a;基礎底座 底層狀態管理庫&#xff0c;負責狀態存儲、Action 派發和 Reducer 執行 ?React-Redux&#xff1a;連接 React 組件與 Redux Store 通…

智能制造:物聯網和自動化之間的關系

工業自動化 工業自動化是機器設備或生產過程在不需要人工直接干預的情況下按預期的目標實現測量、操縱等信息處理和過程控制的統稱。 在傳統的工業生產過程中&#xff0c;很多環節需要人工操作&#xff0c;比如設備調試、生產監控、質量檢測等。然而&#xff0c;隨著工業自動化…

“自動駕駛背后的數學” 專欄導讀

專欄鏈接&#xff1a; 自動駕駛背后的數學 專欄以“自動駕駛背后的數學”為主題&#xff0c;從基礎到深入&#xff0c;再到實際應用和未來展望&#xff0c;全面解析自動駕駛技術中的數學原理。開篇用基礎數學工具搭建自動駕駛的整體框架&#xff0c;吸引兒童培養興趣&#xff0…

集成學習(下):Stacking集成方法

一、Stacking的元學習革命 1.1 概念 Stacking&#xff08;堆疊法&#xff09; 是一種集成學習技術&#xff0c;通過組合多個基學習器&#xff08;base learner&#xff09;的預測結果&#xff0c;并利用一個元模型&#xff08;meta-model&#xff09;進行二次訓練&#xff0c…

Dubbo 全面解析:從 RPC 核心到服務治理實踐

一、分布式系統與 RPC 框架概述 在當今互聯網時代&#xff0c;隨著業務規模的不斷擴大&#xff0c;單體架構已經無法滿足高并發、高可用的需求&#xff0c;分布式系統架構成為主流選擇。而在分布式系統中&#xff0c;遠程服務調用&#xff08;Remote Procedure Call&#xff0…

vmware虛擬機突然連不上網

1.一般是自己的主機把服務給關掉了&#xff0c;右擊我的電腦&#xff0c;然后找到管理->服務&#xff0c;確保下面虛擬機的網絡服務是否打開 Vmware虛擬機突然連接不上網絡【方案集合】_vmware虛擬機連不上網-CSDN博客 2.識別到無效網絡 控制面板->網絡和共享中心&…

Selenium之簡介

Selenium簡介 首先&#xff0c;讓我們看看官網是怎么定義的 Selenium是一個支持web瀏覽器自動化的一系列工具和庫的綜合項目&#xff0c;提供了擴展來模擬用戶和瀏覽器的交互&#xff0c;用于擴展瀏覽器分配的分發服務器&#xff1b;用于W3C WebDriver規范的基礎架構 其實&a…

SpringBoot 開發入門—Springboot基礎框架匯總

一、環境準備 Java&#xff1a;Spring Boot 3.0.2 需要 Java 17&#xff0c;并且與 Java 19 兼容 Maven&#xff1a;Apache Maven 3.5 或更高版本兼容 二、啟動器 以下應用程序啟動器由 Spring Boot 在該組下提供&#xff1a;org.springframework.boot 表 1.Spring 引導應…

前端批量導入方式

webpack批量導入 webpack中使用 require.context 實現自動導入 const files require.context(./modules, false, /\.ts$/); const modules {}; files.keys().forEach((key) > {if (key ./index.ts) { return; }modules[key.replace(/(\.\/|\.ts)/g, )] files(key).def…