日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql脏写_图解脏写、脏读、不可重复读、幻读

發布時間:2023/12/20 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql脏写_图解脏写、脏读、不可重复读、幻读 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL 是支持多事務并發執行的,否則來一個請求處理一個請求,處理一個人請求的時候,別的人都等著,這網站就別做了,用戶都要砸鍵盤了。

這里就有一個問題了:一個事務在寫數據的時候,另一個事務要讀這行數據,該怎么處理?一個事務在寫數據,另一個數據也要寫這行數據,又該怎么處理這個沖突?其實吧,為了解決這些問題,MySQL 可以說是煞費苦心,使用了 MVCC 多版本控制機制、事務隔離機制、鎖機制等。

你一定聽過事務可以分成 4 個隔離級別:讀未提交、讀已提交、可重復讀、串行化。上一篇文章「從一個 update 語句開始,來看看 InnoDB 的底層架構原理」中提到的 InnoDB 存儲引擎,默認的隔離級別就是是可重復讀 REPEATABLE READ。

到這里,不知道你有沒有產生幾個疑問:我們知道有事務隔離這回事兒,那為什么要隔離?為什么隔離還不夠,還要分多個級別?

事務隔離級別解決了什么問題?沒有解決什么問題?

MySQL 是如何實現這幾個隔離級別的呢?它們底層的工作原理是什么呢?

多個事務并發執行,是怎么一個場景呢?

不知道你第一次聽到「事務隔離機制」的時候有什么想法,我的第一反應就是:好好的事務,為什么要給它隔離呢??這么問主要是,對事物并發執行是怎么一個情況,還沒有清晰的認識。

多個事務并發執行的場景其實是這樣的。我們有一個業務系統,里面很多線程在執行業務代碼,比如說 Service 去調用 Dao,Dao 去操作數據庫。在業務代碼層面,對數據庫的操作我們可能會給它加上事務,加上事務之后,如果執行成功就commit,執行失敗就要rollback。

begin; # 開始事務insert into runoob_transaction_test value(5);insert into runoob_transaction_test value(6);commit; # 提交事務或者rollback; # 回滾事務

上面這個流程大家肯定很熟了吧。接下來,MySQL 會把磁盤中的數據加載到 Buffer Pool,再對 Buffer Pool 中數據執行增刪改查操作。同時會寫入 undo log 和 redo log 等一系列操作。

上面講的是一個事務執行的大致流程。現在每個線程都執行一個事務,那就同時有多個線程去調 MySQL 的接口,來操作 Buffer Pool 中的數據。

第二個問題就來了:多個事務并發又咋了,有什么問題么?是有問題,因為允許多個事務并發執行,那它們就可能同時訪問同一行數據。

寫沖突,多個事務同時對緩存頁里面的一行數據進行更新,允許誰來寫?這個沖突要怎么解決?可不可以用鎖來解決?

讀寫沖突,一個事務在寫數據,別的事務過來讀數據了,這個時候要怎么辦?

事務的隔離機制就是解決讀寫沖突的一個手段。

現在你已經知道了多個事務并發執行是怎么樣的一個場景了,也知道會產生寫沖突或者讀寫沖突,事務的隔離機制主要就是用來解決讀寫沖突的問題。

具體來說就是:臟寫、臟讀、不可重復讀和幻讀。

臟寫

MySQL 的數據是放在一個個緩存頁里面的,然后每個緩存頁里面是一行行的數據,就像下面這張圖這樣:

現在有一個事務 A 正在執行,它執行的是一個寫操作,原來有一行數據是 NULL,在它執行了 update 操作,把 NULL 改成了值 A,就像下面這張圖這樣:

注意,這里事務 A 更新了一行數據但是它并沒有提交。緊接著事務 B 也來寫這行數據了,這就是多個事務并發執行,還操作同一行數據的場景了。事務 B 做的也是 update 操作,把值 A 改成了值 B,如下圖所示:

前面說了事務 A 此時是沒有提交的,除了提交事務,還可以干嘛?對了,事務 A 是可以回滾的!回滾意味著什么?回滾是不是就意味著原來那一行數據,要回滾到事務 A 執行之前的那個值,也就是 NULL:

事務 A 回滾了,對于事務 B 意味著什么?事務 B 明明正常寫了一行數據,但是寫完之后發現值變了,變成一個莫名其妙的值。

這就是臟寫,臟寫就是說我兩個事務來寫同一行數據,但是前面的那個事務反悔了,回滾了。在后面的事務 B 眼里,我明明修改了數據,怎么會寫錯呢?它打算也想不到,是別的事務回滾了。

臟讀

臟讀的情況和臟寫差不多嘍:事務 A 先寫數據,把一行數據的值從 null 改成了 A,同樣事務 A 并沒有提交;

然后事務 B 過來讀了,它讀到的值自然是 A 嘍;

接著事務 A 又回滾了!回滾之后值就要從 A 變回到 NULL;

事務 B 再去讀的時候讀到的就是 NULL 了

臟讀就是事務 B 因為事務 A 回滾,讀不到之前的值了。

不可重復讀事務 A 先去讀一行數據,讀到值是 A;

事務 B 去修改數據,改成了 B。這里和前面不一樣的地方就在,事務 B 它還提交了,不回滾了。

事務 A 第二次去讀,讀到的是 B,和第一次讀到的 A 不一樣。

那不可重復讀是指什么?它是指在同一個事務里面查詢同一行數據,每次查到的數據都不一樣。是不是和臟讀很像,區別在于臟讀是由于別的事務回滾導致,而不可重復讀讀到的其實是已經提交的數據。

幻讀

最后就剩下幻讀了,前面的臟寫、臟讀、不可重復讀,都是針對一行數據來說的,幻讀不一樣,幻讀是指查到了之前沒有的一批數據:事務 A 里有一個條件查詢的語句 select name from t where id > 10,它進行了一次范圍查詢,查到了 10 行數據;

然后事務 B 網里面加入了一批數據

事務 A 再查的用條件查詢語句查詢的時候,發現查到了 15 條,其中 5 條是之前沒見過的。這個事務 A 以為自己出現幻覺了,怎么會多出這么些個數據?這就是幻讀了。

思考題:事務隔離如何解決這些問題?

文章的開頭提出了這樣幾個問題:我們知道有事務隔離這回事兒,那為什么要隔離?為什么隔離還不夠,還要分多個級別?

事務隔離級別解決了什么問題?沒有解決什么問題?

MySQL 是如何實現這幾個隔離級別的呢?它們底層的工作原理是什么呢?

這里先回答,使用事務隔離機制是為了避免多事務并發執行時的讀寫沖突,具體來說就是臟寫、臟讀、不可重復讀、幻讀。

那么讀未提交、讀已提交、可重復讀、串行化,這四個隔離級別是如何解決這些問題的呢?兩個事務同時寫一行數據,這樣的寫沖突,事務隔離機制能解決么?

總結

以上是生活随笔為你收集整理的mysql脏写_图解脏写、脏读、不可重复读、幻读的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 毛片免费播放 | 国产精选视频在线观看 | 日本中文字幕久久 | 韩国日本美国免费毛片 | 边啃奶头边躁狠狠躁 | 国产精品三级久久久久久电影 | 狠狠干五月天 | 性生交大全免费看 | 日吊视频 | 综合欧美亚洲 | 成年人的黄色片 | 成人免费一区二区 | 国产情侣av在线 | 中文字幕在线三区 | 日本老少交 | 波多野结衣一区二 | 日韩在线国产精品 | 精品视频在线看 | 亚天堂| 国产一区不卡在线 | 青青草一区二区 | 少妇又色又紧又爽又刺激视频 | 日韩成人无码 | ass日本粉嫩pics珍品 | 欧美特黄一级大片 | 亲嘴扒胸摸屁股激烈网站 | 久久影视 | 内射中出日韩无国产剧情 | 中文永久免费观看 | 久久视频精品 | 扒开美女内裤狂揉下部 | 涩涩久久| 亚洲精品人 | 粉嫩av在线播放 | 国产免费一区二区三区在线播放 | 亚洲一级在线观看 | 最近中文字幕在线中文视频 | 亚洲另类在线观看 | 丰满人妻综合一区二区三区 | 午夜一区不卡 | 91桃色免费视频 | 欧美精品入口蜜桃 | 午夜九九| 久久天堂网 | 黄色大片免费观看视频 | 国产美女精品一区二区三区 | 亚洲自拍中文字幕 | 免费日本黄色片 | 国产农村老头老太视频 | 超碰在线中文字幕 | 欧洲美一区二区三区亚洲 | 在线观看国产区 | 久久最新| 国产主播一区二区三区 | 日韩大片免费 | 国产野外作爱视频播放 | 一级片久久| 欧美性xxxxx极品少妇 | 国产少妇一区二区 | 久久久国产视频 | 亚洲国产成人无码av在线 | 五级黄高潮片90分钟视频 | 七月丁香婷婷 | 国产精品成人免费一区二区视频 | 美女啪啪免费视频 | 黄色片成人 | 777精品伊人久久久久大香线蕉 | 男人的天堂免费av | 久久久男人天堂 | 韩国日本美国免费毛片 | 啪啪网站免费观看 | 国产精品一级二级三级 | 中国字幕一色哟哟 | 91精品久久久久久久99蜜桃 | 伊人丁香| 亚洲黄色录像片 | 亚洲最大在线观看 | 少妇av导航 | 天天射天天干天天舔 | √天堂资源地址在线官网 | 亚洲国产精品午夜久久久 | 狂野欧美性猛交xxxx777 | 蜜臀国产AV天堂久久无码蜜臀 | 亚洲成人h | 欧美老肥妇做.爰bbww视频 | 欧美人妖xxxx | 久久精品—区二区三区舞蹈 | 久久综合影院 | 国产成人无码精品亚洲 | 高清国产一区二区三区 | 亚洲综合一区在线观看 | 成片免费观看视频 | 91福利在线免费观看 | 国产精品熟女一区二区不卡 | 香蕉视频在线视频 | 好吊一二三区 | 99这里有精品 | 欧美精品一区二区蜜臀亚洲 | 久久国产精品视频 |