事務的ACID是什么及扁平化事務、鏈式事務

一、什么是事務

1.事務(Transaction)是區別于數據庫文件系統的重要特性之一。事務會把數據庫從一種一致狀態轉換為另一種一致狀態。在數據庫提交工作時,可以確保要么所有修改都已經保存,要么所有修改都不保存。

2.InnoDB存儲引擎中的事物完全符合ACID的特性。

  • 原子性(atomicity)

  • 一致性(consistency)

  • 隔離性(isolation)

  • 持久性(duration)

3.事務是訪問并更新數據庫中各種數據項的一個程序執行單元。在事務中的操作,要么都做修改,要么都不做,這就是事物的目的。

二、ACID的具體描述

4.具體介紹事物的ACID特性:

  • Atomicity:原子性指整個數據庫事務是不可分割的工作單位。只有使事務中所有的數據庫操作都執行成功,才算整個事務成功。事務中任何一個SQL語句執行失敗,已經執行成功的SQL語句也必須撤銷,數據庫狀態應該退回到執行事務前的狀態。

  • Consistency:一致性指將事務從數據庫從一種狀態轉變為下一種一致狀態。在事務開始之前和結束以后,數據庫的完整性約束沒有被破壞。【實體完整性(Primary key/Unique)、參照完整性(Foreign Key)、域完整性(Not Null /check)、用戶自定義完整性(Trigger/Assertion】

  • Isolation:(別名:并發控制(concurrency control)、可串行化(serializability)、鎖(locking))事務的隔離性要求每個讀寫事務的對象對其他事務的操作對象能相互分離,即該事務提交前對其他事務都不可見。

  • Durability:事務一旦提交,其結果就是永久性的。即使發生宕機等故障,數據庫也能將數據恢復。只能從事務本身的角度來保證結果的永久性。【持久性保證的是事務系統的高可靠性(High Reliability),而不是高可用性(High Availability)。

三、事務的分類

  • 扁平事務(Flat Transactions)

  • 帶有保存點的扁平事務(Flat Transaction with Savapoints)

  • 鏈事務(Chained Transactions)

  • 嵌套事務(Nested Transactions)

  • 分布式事務(Distributed Transactions)

扁平事務:是事務類型中最簡單的一種,但實際生產環境中,這可能是使用最頻繁的事物。主要限制:不能提交或者回滾事務的某一部分,或分幾個步驟提交。

【注:帶有保存點的扁平事務,當發生系統崩潰時,所有的保存點都將消失,因為其保存點是易失的(volatile),而非持久的(persistent)。這意味著當進行數據恢復時,需要從開始處重新執行,而不能從最近的一個保存點繼續開始。】

帶有保存點的事務:除了支持扁平事務支持的操作外,允許在事務執行過程中回滾到同一事務中較早的一個狀態。【保存點Savepoint:用來通知系統應該記住事務當前的狀態,以便當發生錯誤時,事務能回到保存點當時的狀態。保存點能用作內部的重啟動點,根據應用邏輯,決定是回到最近一個保存點還是其他更早的保存點。】

鏈事務:可視為保存點模式的一個變種。在提交一個事務時,釋放不需要的數據對象,將必要的處理上下文隱式地傳給下一個要開始的事務。【提交事務操作和開始下一個事務操作將合并為一個原子操作。】

【注:帶有保存點的扁平事務能回滾到任意正確的保存節點,且不影響迄今為止的所有鎖;而鏈事務中的回滾僅限于當前事務,即只能恢復到最近一個的保存點,且在執行COMMIT后即釋放了當前事務所持有的鎖。】

嵌套事務:是一個層次框架。有一個頂層事務(Top-level transation)控制著各個層次的事務。頂層事務之下嵌套的事務被稱為子事務(subtransaction),其控制每一個局部的變換。【任何子事務都在頂層事務提交后才真正提交】

分布式事務:通常是一個在分布式環境下運行的扁平事務,因此需要根據數據所在位置訪問網絡中的不同節點。

推薦一本書:《MySQL技術內幕InnoDB存儲引擎》姜承堯(著)

上述圖片來自:https://github.com/asdbex1078/MySQL

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

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

相關文章

WPF實現搜索文本高亮

WPF實現搜索文本高亮 1、使用自定義的TextBlock public class HighlightTextblock : TextBlock{public string DefaultText { get; set; }public string HiText{get { return (string)GetValue(HiTextProperty); }set { SetValue(HiTextProperty, value); }}// Using a Depend…

31.@Anonymous

1?@Anonymous原理 大家應該已經習慣我的教學套路,很多時候都是先使用,然后講述原理。 上節課我們使用了注解@Anonymous,然后接口就可以直接被訪問到了,不用token!不用token!不用token!。 我們一般知道,注解是給程序看的,給機器看的,當然也是給程序員看的。注解如果…

詳解HTML

目錄 1.HTML 結構 1.1認識HTML標簽 1.2標簽層次結構 1.3快速生成代碼框架 2.HTML常見標簽 2.1注釋標簽 2.2標題標簽:h1-h6 2.3段落標簽:p 2.4換行標簽:br 2.5格式化標簽 2.6圖片標簽:img 2.7超鏈接標簽 2.8表格標簽…

全域運營是本地生活的下半場?新的創業風口來了?

隨著全域概念的興起,全域運營賽道也逐漸進入人們的視野之中,甚至有業內人士預測,全域運營將會是本地生活下半場的大趨勢。 之所以這么說,是因為全域運營作為包含了公域和私域內所有運營業務的新模式,不僅能同時做所有本…

設計模式-解釋器模式

作者持續關注 WPS二次開發專題系列,持續為大家帶來更多有價值的WPS開發技術細節,如果能夠幫助到您,請幫忙來個一鍵三連,更多問題請聯系我(QQ:250325397) 定義 解釋器模式(Interpreter Pattern&…

vue3 組件刷新

在 Vue 3 中&#xff0c;如果你想刷新一個組件&#xff0c;有幾種方法可以實現。 使用 key 屬性: 當你想要強制重新渲染一個組件時&#xff0c;你可以為其添加一個獨特的 key 屬性。當 key 屬性的值改變時&#xff0c;Vue 會強制組件重新創建。 <template> <MyComp…

jQuery 中的toggleClass應用 (含代碼)

直接上代碼 <!DOCTYPE html> <html><head><style>.info {color: green;}</style></head><body><input type"button" value"點擊" onclick"changeClass()" /><div id"x1">例子…

第十五屆藍橋杯國賽前的問題記錄

文章目錄 遇到的問題問題解析1.生成m-n的隨機數&#xff0c;包括倆個數在內2.fetch解析后如何獲取結果3.獲取多選下拉框&#xff08;select標簽設置multiple屬性&#xff09;的值4.如何刪除某個獲取到的節點5.vue中遇到多選下拉框如何處理 小結 遇到的問題 生成m-n的隨機數fet…

(delphi11最新學習資料) Object Pascal 學習筆記---第12章第3節 ( RTL 中的類引用 )

12.3.1 RTL 中的類引用** ? System 單元和其他核心 RTL 單元聲明了許多類引用&#xff0c;包括以下幾種&#xff1a; TClass class of TObject; ExceptClass class of Exception; TComponentClass class of TComponent; TControlClass class of TControl; TFormClass c…

Nginx企業級負載均衡:技術詳解系列(9)—— Nginx核心配置詳解(全局配置)

你好&#xff0c;我是趙興晨&#xff0c;97年文科程序員。????? 在 Nginx企業級負載均衡&#xff1a;技術詳解系列&#xff08;8&#xff09;—— Nginx核心配置詳解&#xff08;默認配置文件&#xff09;文章中&#xff0c;咱們討論了Nginx核心配置文件的基礎知識&#…

【Python設計模式11】建造者模式

建造者模式&#xff08;Builder Pattern&#xff09;是一種創建型設計模式&#xff0c;它將一個復雜對象的構建過程分離出來&#xff0c;使得同樣的構建過程可以創建不同的表示。建造者模式通過使用多個簡單的對象一步一步構建成一個復雜的對象。 建造者模式的結構 建造者模式…

centos9 stream在線安裝NVIDIA驅動(rockylinux9.4也成功安裝nvidia驅動)

Install NVIDIA Drivers on CentOS Stream 9&#xff08;rockylinux9.4成功&#xff09; 主板為技嘉mz72-hb2 顯卡為4090 一.Disable Secure Boot From the BIOS 二.Enabling the EPEL Repository on CentOS Stream 9 1.update the DNF package repository cache sudo dnf …

STM32控制HC-SR04超聲模塊獲取距離

歡迎入群共同學習交流 時間記錄&#xff1a;2024/5/23 一、模塊介紹 &#xff08;1&#xff09;引腳介紹 VCC&#xff1a;電源引腳&#xff0c;接單片機3.3/5V GND&#xff1a;電源地 Trig&#xff1a;超聲信號觸發引腳 Echo&#xff1a;超聲信號接收引腳 &#xff08;2&…

java.util.Arrays 詳解

排序 sort(int[] a): 對指定 int 型數組按數字升序進行排序。sort(Object[] a): 對指定對象數組進行排序&#xff08;對象的類必須實現 Comparable 接口&#xff09;。sort(T[] a, Comparator<? super T> c): 使用指定的比較器對數組進行排序。sort(int[] a, int fromI…

給你一把接口響應斷言神器,你要不要?

JSON Schema是用來標記和校驗JSON數據&#xff0c;類似于XMLSchema,可用在自動化測試驗證JSON數據。 官網&#xff1a;http://json-schema.org/ 最常用版本&#xff1a;draft 04。&#xff08;目前各類編程語言對draft 04支持最廣泛&#xff09; 舉個例子 假如你有一個接口…

202473讀書筆記|《但愿呼我的名為旅人:松尾芭蕉俳句300》——圍爐夜話,身頓心安,愿每個人都能在愛里自由馳騁

202473讀書筆記|《但愿呼我的名為旅人&#xff1a;松尾芭蕉俳句300》——圍爐夜話&#xff0c;身頓心安&#xff0c;愿每個人都能在愛里自由馳騁 &#x1f60d;&#x1f60d;&#x1f929;&#x1f929; 譯者序正文二正文三正文四正文五正文六正文七 《但愿呼我的名為旅人&…

Lua中table.sort()使用方式

table.sort(tab,compare) 參數如下&#xff1a; tab:表名 compare:比較規則函數名 簡略寫法&#xff1a; a {1,2,3} table.sort(a,function(a,b) return a>b end) compare這個參數是一個函數&#xff0c;它有兩個參數&#xff0c;你可以理解為表中的兩個不同元素&…

智能進化:讓AI大模型變得更聰明的路徑探索

前言 隨著人工智能&#xff08;AI&#xff09;技術的飛速發展&#xff0c;大模型在多個領域展現出了前所未有的能力。然而&#xff0c;它們仍然面臨著理解力、泛化能力和適應性等方面的挑戰。如何讓大模型變得更聰明&#xff0c;是當前AI研究和應用的一個重要課題。本文將探討…

解除網頁禁止選擇

控制臺輸入以下命令 復制&#xff1a;javascript:void(document.body.οncοpy) 可選&#xff1a;javascript:void(document.body.onselectstart) 拖拉&#xff1a;javascript:void(document.body.οnmοuseup)

C++實現基于http協議的epoll非阻塞模型的web服務器框架(支持訪問服務器目錄下文件的解析)

使用方法&#xff1a; 編譯 例子&#xff1a;./httpserver 9999 ../ htmltest/ 可執行文件 端口 要訪問的目錄下的 例子&#xff1a;http://192.168.88.130:9999/luffy.html 前提概要 http協議 &#xff1a;應用層協議&#xff0c;用于網絡通信&#xff0c;封裝要傳輸的數據&…