【Java面試】請你簡單說一下Mysql的事務隔離級別

来源:https://www.cnblogs.com/mic112/archive/2022/06/10/16363123.html
-Advertisement-
Play Games

一個工作了6年的粉絲,去阿裡面試,在第一面的時候被問到”Mysql的事務隔離級別“。 他竟然沒有回答上來,一直在私信向我訴苦。 我說,你只能怪年輕時候的你,那個時候不夠努力導致現在的你技術水平不夠。 好吧,關於這個問題,看看普通人和高手的回答。 普通人: Mysql的事務隔離級別它有四種 1.讀已提 ...


一個工作了6年的粉絲,去阿裡面試,在第一面的時候被問到”Mysql的事務隔離級別“。

他竟然沒有回答上來,一直在私信向我訴苦。

我說,你只能怪年輕時候的你,那個時候不夠努力導致現在的你技術水平不夠。

好吧,關於這個問題,看看普通人和高手的回答。

普通人:

Mysql的事務隔離級別它有四種

1.讀已提交
2.可重覆讀
3.串列化
4.未提交讀

這四種隔離級別代表的是說我在不同的那個...就是我多個事務競爭的時候那麼我每一個就是我的這個事務併發執行的時候並行執行的時候我對數據的一個影響。

比如說我事務之間的一個隔離性,所以通過不同的這種隔離級別它可以去解決所謂的這個幻讀或者不可重覆讀以及說那個讀未提交這些問題。

然後我記得就是這個最安全的是那種就串列化,串列化就是說它不會存在任何的這個上面幻讀不可重覆讀的一些問題。

高手:

好的,關於這個問題,我會從幾個方面來回答。

首先,事務隔離級別,是為瞭解決多個並行事務競爭導致的數據安全問題的一種規範。

具體來說,多個事務競爭可能會產生三種不同的現象。

  1. 假設有兩個事務T1/T2同時在執行,T1事務有可能會讀取到T2事務未提交的數據,但是未提交的事務T2可能會回滾,也就導致了T1事務讀取到最終不一定存在的數據產生臟讀的現象。

    image-20220421232707839

  2. 假設有兩個事務T1/T2同時執行,事務T1在不同的時刻讀取同一行數據的時候結果可能不一樣,從而導致不可重覆讀的問題。

    image-20220421232859097

  3. 假設有兩個事務T1/T2同時執行,事務T1執行範圍查詢或者範圍修改的過程中,事務T2插入了一條屬於事務T1範圍內的數據並且提交了,這時候在事務T1查詢發現多出來了一條數據,或者在T1事務發現這條數據沒有被修改,看起來像是產生了幻覺,這種現象稱為幻讀。

    image-20220421233141866

而這三種現象在實際應用中,可能有些場景不能接受某些現象的存在,所以在SQL標準中定義了四種隔離級別,分別是:

  1. 讀未提交,在這種隔離級別下,可能會產生臟讀、不可重覆讀、幻讀。
  2. 讀已提交(RC),在這種隔離級別下,可能會產生不可重覆讀和幻讀。
  3. 可重覆讀(RR),在這種隔離級別下,可能會產生幻讀
  4. 串列化,在這種隔離級別下,多個並行事務串列化執行,不會產生安全性問題。

這四種隔離級別裡面,只有串列化解決了全部的問題,但也意味著這種隔離級別的性能是最低的。

在Mysql裡面,InnoDB引擎預設的隔離級別是RR(可重覆讀),因為它需要保證事務ACID特性中的隔離性特征。

以上就是我對這個問題的理解。

總結

關於這個問題,很多用Mysql5年甚至更長時間的程式員都不一定非常清楚的知道。

這其實是不正常的,因為雖然InnoDB預設隔離級別能解決99%以上的問題,但是有些公司的某些業務可能會修改隔離級別。

而如果你不知道,就很可能在程式中出現莫名其妙的問題。

如果有任何面試問題、職業發展問題、學習問題,都可以私信我。

file

版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Mic帶你學架構
如果本篇文章對您有幫助,還請幫忙點個關註和贊,您的堅持是我不斷創作的動力。歡迎關註「跟著Mic學架構」公眾號公眾號獲取更多技術乾貨!


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

-Advertisement-
Play Games
更多相關文章
  • 1、從規範角度分析,一般是禁止使用C++的異常機制的。 2、要求所有的錯誤都應該通過錯誤值在函數間傳遞病做相應的判斷,而不應該通過異常機制進行錯誤處理。 3、編碼人員必須完全掌控自己的整個編碼過程,要有攻擊者思維,主動把握有可能出錯的環節,儘可能的分析出程式的所有異常,增強安全編碼意識。 4、使用c ...
  • ​ 1,建一個表 create table 表名( 屬性a 類型 限制, 屬性b 類型 限制 ) ​編輯 2,向表裡添加數據 insert into Tset(屬性a,屬性b) values(a的數據,b的數據) 給屬性a,屬性b添加數據 insert into Tset values(a的數據,b ...
  • 排序演算法總結 1.十大經典演算法及性能 2.具體排序演算法 1.冒泡排序 迴圈過程中比較相鄰兩個數大小,通過交換正確排位,迴圈整個數組即可完成排序 圖片演示 代碼實現Java //冒泡排序 public static Integer[] Bubble(Integer[] array){ boolean ...
  • 前言 不知道有沒有小伙伴跟我一樣,每次刷抖音都不想動手,好希望能夠有什麼東西代替我的手指,我給它一個命令,它就明白我要什麼。於 是,我利用空閑時間操作了一下,終於用Python把自動刷抖音給搞出來了,這下真的是解決了我長久以來的困擾… 工具準備 1.Python3.7.7 2.adb(Android ...
  • 我們知道 Python 有很多運算符可以進行數學運算,如果是簡單的問題還好說,但是要處理一些相對複雜的問題也要我們自己一行一行手動的來編寫嗎?答案當然不是,Python 提供了 math 模塊對一些數學運算提供了支持。 1.簡介 math 模塊提供了對 C 標准定義的數學函數的訪問,但該模塊並不支持 ...
  • Skywalking介紹 Skywalking是一個國產的開源框架,2015年有吳晟個人開源,2017年加入Apache孵化器,國人開源的產品,主要開發人員來自於華為,2019年4月17日Apache董事會批准SkyWalking成為頂級項目,支持Java、.Net、NodeJs等探針,數據存儲支持 ...
  • 面試總結 最近棧長面試了一個 5 年經驗的 Java 程式員,簡歷和個人介紹都提到了精通 Java 多線程,於是我就問了幾個多線程方面的問題: 1、實現多線程有哪幾種方式,如何返回結果? 2、多個線程如何實現順序訪問? 3、兩個線程如何進行數據交換? 4、如何統計 5 個線程的運行總耗時? 5、如何 ...
  • 1 背景與挑戰 1.1 背景介紹 1.1.1 課程概述 瞭解雙11 的歷程 學習當前主流的電商系統架構體系 瞭解大促對電商系統的一些挑戰 面對大促活動,站在架構師角度思考,可能有哪些問題,如何應對 1.1.2 雙11歷程 (最早接觸雙11的年份?) ​ 起於2009年,剛開始的雙十一還並不出名,電商 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...