03_事務隔離

来源:https://www.cnblogs.com/LuoQi11/archive/2023/06/03/03_adivision-isolation-zeqf1e.html
-Advertisement-
Play Games

![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230602231102469-1389179464.png) # 1. 基礎思想 ## 1.1. 預寫日誌記錄 ## 1.2. 兩階段提交 ## 1.3. 關係資料庫 # 2 ...


03_事務隔離

事務隔離

事務需要保證一組資料庫操作,要麼全部成功,要麼全部失敗;

MySQL事務隔離性是保證數據一致性和併發控制的重要手段之一,它對於多個事務同時訪問和修改同一數據的情況下,能夠保證事務之間的獨立性和隔離性,避免數據的不一致和衝突。

ACID是MySQL事務的四個特性,其中隔離性是指多個併發事務之間相互隔離,互不幹擾,每個事務僅能看到自己的修改,而不能看到其他事務的修改。

  • ACID概念最早由IBM的研究員在20世紀80年代提出,主要是為瞭解決資料庫併發控制和數據一致性的問題,並逐漸成為了資料庫事務的標準特性。
  • ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔離性、持久性)

隔離級別

MySQL中有四種隔離級別,包括讀未提交、讀提交、可重覆讀和串列化。

  • 讀未提交(read uncommitted
  • 讀提交(read committed
  • 可重覆讀(repeatable read)、
  • 串列化(serializable

其中,讀未提交是最低的隔離級別,它允許一個事務讀取另一個事務未提交的數據,可能會出現臟讀、不可重覆讀和幻讀的問題。

讀提交是一個事務提交後才能被其他事務看到,避免了臟讀的問題,但可能會出現不可重覆讀和幻讀的問題。

可重覆讀是MySQL預設的隔離級別,它保證了在一個事務執行期間,讀取的數據是一致的,不會出現臟讀、不可重覆讀和幻讀的問題。

串列化是最高的隔離級別,它通過加鎖的方式保證了事務的串列執行,避免了所有併發問題,但會導致性能問題。

事務隔離的實現

MySQL的事務隔離性是通過多版本併發控制(MVCC)來實現的,它通過為每個事務創建一個獨立的視圖來保證事務之間的隔離性。

  • 在可重覆讀隔離級別下,視圖是在事務啟動時創建的,整個事務存在期間都使用這個視圖。
  • 在讀提交隔離級別下,視圖是在每個SQL語句開始執行時創建的。
  • 而在讀未提交隔離級別下直接返回記錄上的最新值,沒有視圖概念。
  • 在串列化隔離級別下,直接用加鎖的方式來避免併發訪問。

同時,MySQL在實現MVCC時,每條記錄在更新時都會同時記錄一條回滾操作,同一條記錄在系統中可以存在多個版本,回滾日誌會在不需要的時候被刪除。

最後,需要註意的是,長事務會導致系統裡面存在很老的事務視圖,這些事務可能會訪問資料庫裡面的任何數據,導致大量占用存儲空間,因此建議儘量避免使用長事務。

預設隔離級別

Oracle 資料庫的預設隔離級別其實是:讀提交;

MySQL 資料庫的預設隔離級別是:可重覆讀。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 人臉識別技術在現代社會中扮演著越來越重要的角色,比如人臉識別門禁、人臉識別支付、甚至人臉識別網站登錄等。 最近有群友問.NET有沒有人臉識別的組件,小編查閱相關資料介紹下麵幾種.NET人臉識別組件供大家參考。 **1、Microsoft Azure Face API** 簡介:Microsoft A ...
  • ## 01|修改Win用戶名 打開運行,輸入cmd,回車; 輸入control userpasswords2,回車; 點擊屬性,修改用戶名,點擊確定; 打開運行,輸入regedit,回車; 定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Cur ...
  • 最近在研究ebpf的應用,網上對較低版本的內核和centos操作系統的相關資料較少,這裡記錄一個自己環境配置&編譯運行一個ebpf的helloworld程式的過程。 > 環境是centos7.9,虛擬機安裝記憶體需要分配高一些,後續編譯llvm很吃性能 # 基礎依賴安裝 ## 升級內核版本 ebpf需 ...
  • 目錄 一、grep查找文件內容 二、sort排序 三、uniq統計壓縮重覆 四、tr替換壓縮 五、cut截斷 六.sqlit拆分 七.paste合併 八.eval 一、grep(匹配文件內容) grep [選項]… 查找條件 目標文件 -m 匹配次數 -v 除什麼以外 -i 忽略大小寫 -n 顯示匹 ...
  • nginx.conf中有關訪客日誌定義如下 #log_format #創建日誌格式,名為main log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$h ...
  • 上周聽到公司同事分享 MySQL 同步數據到 ES 的方案,發現很有意思,感覺有必要將這塊知識點再總結提煉一下,就有了這篇文章。 本文會先講述數據同步的 4 種方案,並給出常用數據遷移工具,乾貨滿滿! 不 BB,上文章目錄: 1. 前言 在實際項目開發中,我們經常將 MySQL 作為業務資料庫,ES ...
  • 具象化理解資料庫的三級模式及二級映像 形象一點來說,把數據看做貨物,資料庫是倉庫,模式就是表格。 你有一個倉庫,倉庫里成千上萬的貨物,隨便你怎麼堆,你堆個正方體,堆個圓柱體,甚至隨便亂堆都行,你怎麼堆的叫內模式。 完事你寫了一張表,表上對全部貨物按某個標準分類,而且標清了啥貨物在哪(這個操作就是從內 ...
  • MySQL索引長度(key_len)計算 計算規則 索引欄位:沒有設置 NOT NULL,則需要加 1 個位元組。 定長欄位:tinyint 占 1 個位元組、int 占 4個位元組、bitint 占 8 個位元組、date 占 3個位元組、datetime 占 5 個位元組、char(n) 占 n 個位元組。 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...