【面試題】談談MySQL的事務

事務是啥

MySQL的事務就是把多個sql語句操作打包在一起執行,要么全部執行,要么一個都別執行。這種操作稱為“原子性”,是事務最核心的特征。當某個sql操作出錯時,就會進行“回滾/rollback”操作,即把執行過的操作逆向恢復回去,數據庫會把每個操作記錄下來,當某個操作出錯時,就會把之前的操作進行逆操作,比如前面是刪除操作,逆操作就進行插入操作,把刪除的數據重新插入回去。

start transaction;--開啟事務
--
--中間寫多個sql
--
commit;--提交事務

當開啟事務后不會立即執行sql操作,會等到commit提交事務后,會統一執行多個sql。

事務的四大特性

  1. 原子性:即把多個sql操作合并在一起(相當于一個操作),統一執行,要么都執行成功,要么一個都別執行。

  2. 一致性:即事務執行前后,數據都是合法的。

  3. 持久性:即事務的操作后的結果都會寫入硬盤,無論是程序還是主機重啟,修改操作都是生效的。

  4. 隔離性:即同一個數據庫服務器,在針對多個事務并發執行時,事務之間相互影響的程度。隔離性越高,并發程度越低,執行效率越慢,反之隔離性越低,并發越高,效率越快。隔離性分為四個檔位,分別是:

    • read uncommited 讀未提交:這個檔位MySQL不做任何限制,隔離性最低,并發程度最高,執行效率最快,此時存在“臟讀、不可重復讀、幻讀”問題。像博客文章點贊數量這種操作就可以使用這個檔位,因為不管點贊是重復了還是沒點贊成功,問題都不大,效率快就行。
    • read commited 讀已提交:這個檔位是針對“寫操作”加鎖,此時隔離性提高,并發程度降低,執行效率降低,此時解決了”臟讀“問題,存在”不可重復讀、幻讀“問題。
    • repeatable read 可重復讀:Mysql的默認檔位,此時針對“寫操作”和“讀操作”都進行加鎖,此時隔離性進一步提高,并發程度進一步降低,此時解決了“臟讀、不可重復讀”,依舊存在“幻讀”問題。
    • serializable 串行化:這個檔位是嚴格執行串行化的,即放棄并發,隔離性最高,執行效率最慢,解決了“臟讀、不可重復讀、幻讀”問題。

    臟讀:即一個事務讀了一個臟數據,比如此時有兩個事務針對同一份數據進行操作。事務A在讀數據,事務B在往這份數據里寫東西,當事務A讀完之后走了,事務B把這份數據修改并保存提交了,此時事務A之前讀到的數據就變成了無效數據,這種情況就稱為“臟讀”,于是可以進行”寫操作“加鎖,即在“寫操作”時,事務A不能讀數據。

    不可重復讀:即針對”寫操作“進行加鎖的情況下,依舊是兩個事務針對同一份數據進行操作,在事務B針對這份數據進行”寫操作“時,事務A是不能進行”寫操作”的,但是可以讀這份文件。于是事務A在讀同一份數據時,事務B隨即修改了數據,導致事務A讀了一半發現數據變了,這種情況就稱為“不可重復讀”問題,即同一個事務針對一份文件連續讀兩次的結果不一致,于是需要針對”讀操作“進行加鎖。

    幻讀:在“寫操作”和“讀操作”都進行加鎖的情況下,事務A進行讀數據(文件)時,事務B不能針對同一份文件進行“讀寫”操作,不過事務B可以針對其他文件進行操作,比如增加一個文件,或者刪除一個文件,于是當事務A讀完一個文件后,發現文件的數量變了,這種情況就稱為“幻讀”問題。即同一個事務連續兩次讀的結果集不同,于是需要嚴格執行串行化,即放棄并發。

栗子:
【臟讀】比如學校黑板報,同學A早上10點來看黑板報發現自己考試成績第一名,高興的回到寢室;隨后10:30學生B過來把黑板報給改了,漏了一名同學的成績,此時同學A真實排名是第三名,不過同學A依舊以為自己是第一名,這種情況就屬于是“臟讀問題”。【不可重復讀】同學A在讀第一塊黑板報,同學B緊接把黑板報的內容改了,導致同學A此時發現讀的內容已經變了,這種情況就屬于是”不可重復讀“,不可重復讀是同學A能立馬發現內容變了,而臟讀是同學A不能發現內容變了。【幻讀】同學A此時在讀黑板報,目前只有一個黑板報有內容,當同學A讀完這個黑板報后就應該算是讀完了黑板報,但是當同學A讀完之后,發現旁邊幾塊黑板報被同學B都寫上了內容,此時導致同學A發現不再是只有一塊黑板報有內容,而是有好幾塊,這種情況就是“幻讀”。

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

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

相關文章

MySQL數據庫進階第二篇(索引,SQL性能分析,使用規則)

文章目錄 一、索引概述二、索引結構三、結構 - B-Tree四、結構 - BTree五、結構 - Hash六、索引分類七、索引語法1.案例代碼 八、SQL性能分析1.查看SQl執行頻率2.慢查詢日志3.PROFILES詳情4.EXPLAIN執行計劃 九、 索引使用規則十、SQL 提示十一、覆蓋索引十二、前綴索引十三、單…

滾動加載react-infinite-scroll-component

react-infinite-scroll-component 當請求數據量過大時,接口返回數據時間會很長,數據回顯時間長,Dom 的渲染會有很大的性能壓力。 antd的List組件中有提到一個滾動加載的組件庫react-infinite-scroll-component 實現滾動加載 Antd&#xff1…

考研高數(高階導數的計算)

1.歸納法 常見高階導數 2.泰勒展開式 3.萊布尼茲公式 4.用導數定義證明導函數在某一點連續的例題

【kubernetes】二進制部署k8s集群之cni網絡插件flannel和calico工作原理(中)

↑↑↑↑接上一篇繼續部署↑↑↑↑ 目錄 一、k8s集群的三種接口 二、k8s的三種網絡模式 1、pod內容器之間的通信 2、同一個node節點中pod之間通信 3、不同的node節點的pod之間通信 Overlay Network VXLAN 三、flannel網絡插件 1、flannel插件模式之UDP模式&#xff0…

java對象所占內存大小輸出

如何計算java對象所占內存大小&#xff0c;可以使用下述三種方法。 使用jdk8自帶API 使用下面語句打印對象所占內存大小&#xff1a;需要保證jdk版本是jdk8。System.out.println(ObjectSizeCalculator.getObjectSize(3L)); 借助org.apache.lucene工具類 引入maven坐標 <…

2024/2/22

P8680 [藍橋杯 2019 省 B] 特別數的和 題目描述 小明對數位中含有 2、0、1、9 的數字很感興趣&#xff08;不包括前導 00&#xff09;&#xff0c;在 1 到 40 中這樣的數包括 1、2、9、10 至 32、39 和 40&#xff0c;共28 個&#xff0c;他們的和是574。 請問&#xff0c;在…

【2024軟件測試面試必會技能】

Unittest(5)&#xff1a;unittest_忽略用例 忽略用例 在執行測試腳本的時候&#xff0c;可能會有某幾條用例本次不想執行&#xff0c;但又不想刪也 不想注釋&#xff0c;unittest通過忽略部分測試用例不執行的方式&#xff0c;分無條件忽略和有條 件忽略,通過裝飾器實現所描述…

Vue3+vite搭建基礎架構(11)--- 菜單欄功能和Tab頁功能實現

Vue3vite搭建基礎架構&#xff08;11&#xff09;--- 菜單欄功能和Tab頁功能實現 說明刪除項目中不需要的文件userStore全局屬性代碼菜單欄代碼Tab頁代碼解決瀏覽器輸入地址時不會打開tab頁問題和切換tab頁時參數丟失問題 說明 這里記錄下自己在Vue3vite的項目使用less來寫樣式…

低代碼開發——企業轉型的萬金油

在數字化時代&#xff0c;企業面臨著日新月異的市場環境和激烈的競爭壓力。為了在這場變革中脫穎而出&#xff0c;企業需要不斷優化業務流程、提升創新能力&#xff0c;以及實現敏捷響應。在這個過程中&#xff0c;低代碼開發作為一種創新性的技術手段&#xff0c;正成為企業轉…

統信UOS_麒麟KYLINOS上監控網絡:探索Smokeping的強大功能

原文鏈接&#xff1a;統信UOS|麒麟KYLINOS上監控網絡&#xff1a;探索Smokeping的強大功能 在當今的網絡環境中&#xff0c;無論是個人用戶還是企業用戶&#xff0c;都非常重視網絡的穩定性和連通性。特別是在進行遠程工作、在線會議、云計算等活動時&#xff0c;網絡質量直接影…

程序員必備技能----刪庫跑路大總結

刪庫跑路大總結&#xff0c;各個都是大殺器&#xff0c;破壞性太大&#xff0c;輕易不要嘗試。 刪除linux根目錄&#xff0c;用戶目錄&#xff0c;其實還可以增加一個刪除/etc。刪除&#xff08;清除&#xff09;數據庫。刪除redis緩存和持久化文件。刪除mongodb庫。git push …

說一說Eclipse的項目類型和常用項目的區別

Eclipse在新建項目的時候有很多類型&#xff0c;包括Java project、Web project等等&#xff0c;如下&#xff1a; 那么這些項目類型有什么區別呢&#xff1f;我們在創建項目的時候應該如何選擇&#xff0c;了解清楚這一點還是非常重要的&#xff0c;但記住一個出發點&#xff…

2.22 day3、4 QT

完善對話框&#xff0c;點擊登錄對話框&#xff0c;如果賬號和密碼匹配&#xff0c;則彈出信息對話框&#xff0c;給出提示"登錄成功”&#xff0c;提供一個Ok按鈕&#xff0c;用戶點擊Ok后&#xff0c;關閉登錄界面&#xff0c;跳轉到其他界面 如果賬號和密碼不匹配&…

讀書筆記:《看電影學金融》

大空頭 禁止做空可以延緩資產價格下降的過程&#xff0c;但是人為保護的高股價最終還是不能持續的。做空引入的空頭買家&#xff0c;可以增加市場的流動性。住房價格指數期貨使房地產的投資屬性與住宅屬性分離&#xff0c;降低因炒房而空置的房屋&#xff0c;降低房價。收益互…

【論文解讀】Uncertainty Quantification of Collaborative Detection for Self-Driving

Uncertainty Quantification of Collaborative Detection for Self-Driving 摘要引言方法問題定義方法概覽Double-M 實驗結論 摘要 在聯網和自動駕駛汽車(CAVs)之間共享信息從根本上提高了自動駕駛協同目標檢測的性能。然而&#xff0c;由于實際挑戰&#xff0c;CAV 在目標檢測…

十九、圖像的放縮和插值

項目功能實現&#xff1a;對一張圖像進行放大和縮小操作 按照之前的博文結構來&#xff0c;這里就不在贅述了 一、頭文件 resizing.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class RESIZING { public:void resizing(Mat& image); };#pragma…

深度解析:用 Python 爬蟲逆向破解 dappradar 的請求頭加密 X-Api-Sk

大家好!我是愛摸魚的小鴻,關注我,收看每期的編程干貨。 逆向是爬蟲工程師進階必備技能,當我們遇到一個問題時可能會有多種解決途徑,而如何做出最高效的抉擇又需要經驗的積累。本期文章將以實戰的方式,帶你詳細地逆向分析 dappradar 網站請求頭加密字段 X-Api-SK 的構造邏…

解決Edge瀏覽器,微博無法查看大圖(Edge Image Viewer)

使用Edge瀏覽器瀏覽微博或其它帶校驗的圖片時&#xff0c;會導致無法查看。 主要原因為Edge自帶了一個Edge Image Viewer, 但是該圖片查看器無法查看帶校驗數據的圖片&#xff0c;所以導致查看時一片空白。 解決方法 地址欄輸入 edge://flags/搜索 Edge Image Viewer選擇 Disa…

HTML5 Canvas 限定文本區域大小,文字自動換行,自動縮放

<!DOCTYPE html> <html> <body><h1>HTML5 Canvas 限定文本展示范圍、自動計算縮放字體大小</h1><div id"tips">0</div> <div id"content">良田千頃不過一日三餐廣廈萬間只睡臥榻三尺良田千頃不過一日三餐…