日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Mysql事務(wù)隔離級別原理實例解析

瀏覽:260日期:2023-10-16 08:00:04

引言

大家在面試中一定碰到過

說說事務(wù)的隔離級別吧?

老實說,事務(wù)隔離級別這個問題,無論是校招還是社招,面試官都愛問!然而目前網(wǎng)上很多文章,說句實在話啊,我看了后我都懷疑作者弄懂沒!因為他們對可重復(fù)讀(Repeatable Read)和串行化(serializable)的解析實在是看的我一頭霧水!

再加上很多書都說可重復(fù)讀解決了幻讀問題,比如《mysql技術(shù)內(nèi)幕--innodb存儲引擎》等,不一一列舉了,因此網(wǎng)上關(guān)于事務(wù)隔離級別的文章大多是有問題的,所以再開一文說明!

本文所講大部分內(nèi)容,皆有官網(wǎng)作為佐證,因此對本文內(nèi)容你可以看完后,你完全可以當(dāng)概念記在腦海里,除非官網(wǎng)的開發(fā)手冊是錯的,否則應(yīng)當(dāng)無誤!

另外,本文會重點說一下

可重復(fù)讀(Repeatable Read)是否真的解決幻讀的問題!

正文

開始我先提一下,根據(jù)事務(wù)的隔離級別不同,會有三種情況發(fā)生。即臟讀、不可重復(fù)讀、幻讀。這里我先不提這三種情況的定義,后面在講隔離級別的時候會補上。

這里,大家記住一點,根據(jù)臟讀、不可重復(fù)讀、幻讀定義來看(自己總結(jié),官網(wǎng)沒有),有如下包含關(guān)系:

Mysql事務(wù)隔離級別原理實例解析

那么,這張圖怎么理解呢?

即,如果發(fā)生了臟讀,那么不可重復(fù)讀和幻讀是一定發(fā)生的。因為拿臟讀的現(xiàn)象,用不可重復(fù)讀,幻讀的定義也能解釋的通。但是反過來,拿不可重復(fù)讀的現(xiàn)象,用臟讀的定義就不一定解釋的通了!

假設(shè)有表tx_tb如下,pId為主鍵

pId name 1 zhangsan

1、讀未提交(READ_UNCOMMITTED)

其實這個從隔離名字就可以看出來,一個事務(wù)可以讀到另一個事務(wù)未提交的數(shù)據(jù)!為了便于說明,我簡單的畫圖說明!Mysql事務(wù)隔離級別原理實例解析

如圖所示,一個事務(wù)檢索的數(shù)據(jù)被另一個未提交的事務(wù)給修改了。

官網(wǎng)對臟讀定義的地址為

https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_dirty_read

其內(nèi)容為

**dirty readAn operation that retrieves unreliable data, data that was updated by another transaction but not yet committed.**

翻譯過來就是

檢索操作出來的數(shù)據(jù)是不可靠的,是可以被另一個未提交的事務(wù)修改的!

你會發(fā)現(xiàn),我們的演示結(jié)果和官網(wǎng)對臟讀的定義一致。根據(jù)我們最開始的推理,如果存在臟讀,那么不可重復(fù)讀和幻讀一定是存在的。

2、讀已提交(READ_COMMITTED)

這個也能看的出來,一個事務(wù)能讀到另一個事務(wù)已提交的數(shù)據(jù)!為了便于說明,我簡單的畫圖說明!

Mysql事務(wù)隔離級別原理實例解析

如圖所示,一個事務(wù)檢索的數(shù)據(jù)只能被另一個已提交的事務(wù)修改。

官網(wǎng)對不可重復(fù)讀定義的地址為

https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_non_repeatable_read

其內(nèi)容為

**non-repeatable readThe situation when a query retrieves data, and a later query within the same transaction retrieves what should be the same data, but the queries return different results (changed by another transaction committing in the meantime).**

翻譯過來就是

一個查詢語句檢索數(shù)據(jù),隨后又有一個查詢語句在同一個事務(wù)中檢索數(shù)據(jù),兩個數(shù)據(jù)應(yīng)該是一樣的,但是實際情況返回了不同的結(jié)果。!

ps:作者注,這里的不同結(jié)果,指的是在行不變的情況下(專業(yè)點說,主鍵索引沒變),主鍵索引指向的磁盤上的數(shù)據(jù)內(nèi)容變了。如果主鍵索引變了,比如新增一條數(shù)據(jù)或者刪除一條數(shù)據(jù),就不是不可重復(fù)讀。

顯然,我們這個現(xiàn)象符合不可重復(fù)讀的定義。下面,大家做一個思考:

這個不可重復(fù)讀的定義,放到臟讀的現(xiàn)象里是不是也可以說的通。顯然臟讀的現(xiàn)象,也就是**讀未提交(READ_UNCOMMITTED)**的那個例子,是不是也符合在同一個事務(wù)中返回了不同結(jié)果!但是反過來就不一定通了,一個事務(wù)A中查詢兩次的結(jié)果在被另一個事務(wù)B改變的情況下,如果事務(wù)B未提交就改變了事務(wù)A的結(jié)果,就屬于臟讀,也屬于不可重復(fù)讀。如果該事務(wù)B提交了才改變事務(wù)A的結(jié)果,就不屬于臟讀,但屬于不可重復(fù)讀。3、可重復(fù)讀(REPEATABLE_READ)

這里,我改變一下順序,先上幻讀的定義

官網(wǎng)對幻讀定義的地址為

https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_phantom

phantomA row that appears in the result set of a query, but not in the result set of an earlier query. For example, if a query is run twice within a transaction, and in the meantime, another transaction commits after inserting a new row or updating a row so that it matches the WHERE clause of the query.

翻譯過來就是

在一次查詢的結(jié)果集里出現(xiàn)了某一行數(shù)據(jù),但是該數(shù)據(jù)并未出現(xiàn)在更早的查詢結(jié)果集里。例如,在一次事務(wù)里進行了兩次查詢,同時另一個事務(wù)插入某一行或更新某一行數(shù)據(jù)后(該數(shù)據(jù)符合查詢語句里where后的條件),并提交了!

好了,接下來上圖,大家自己評定該現(xiàn)象是否符合幻讀的定義

Mysql事務(wù)隔離級別原理實例解析

顯然,該現(xiàn)象是符合幻讀的定義的。同一事務(wù)的兩次相同查詢出現(xiàn)不同行。下面,大家做一個思考:

這個幻讀的定義,放到不可重復(fù)讀的現(xiàn)象里是不是也可以說的通。大家自行思考!反過來就不一定通了。事務(wù)第二次查詢出了一個數(shù)據(jù),但是該數(shù)據(jù)并未出現(xiàn)在第一次查詢的結(jié)果集里。如果該數(shù)據(jù)是修改數(shù)據(jù),那么該現(xiàn)象既屬于不可重復(fù)讀,也屬于幻讀。如果該數(shù)據(jù)是新增或刪除的數(shù)據(jù),那該現(xiàn)象就不屬于不可重復(fù)讀,但屬于幻讀。

接下來說一下,為什么很多文章都產(chǎn)生誤傳,說是可重復(fù)讀可以解決幻讀問題!原因出自官網(wǎng)的一句話(地址是:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html#innodb-record-locks)

原文內(nèi)容如下

By default, InnoDB operates in REPEATABLE READ transaction isolation level. In this case, InnoDB uses next-key locks for searches and index scans, which prevents phantom rows (see Section 14.7.4, “Phantom Rows”).

按照原本這句話的意思,應(yīng)該是

InnoDB默認用了REPEATABLE READ。在這種情況下,使用next-key locks解決幻讀問題!

結(jié)果估計,某個國內(nèi)翻譯人員翻著翻著變成了

InnoDB默認用了REPEATABLE READ。在這種情況下,可以解決幻讀問題!

然后大家繼續(xù)你抄我,我抄你,結(jié)果你懂的!

顯然,漏了'使用了next-key locks!'這個條件后,意思完全改變,我們在該隔離級別下執(zhí)行語句

select * from tx_tb where pId >= 1;

是快照讀,是不加任何鎖的,根本不能解決幻讀問題,除非你用

select * from tx_tb where pId >= 1 lock in share mode;

這樣,你就用上了next-key locks,解決了幻讀問題!

4、串行讀(SERIALIZABLE_READ)

在該隔離級別下,所有的select語句后都自動加上lock in share mode。因此,在該隔離級別下,無論你如何進行查詢,都會使用next-key locks。所有的select操作均為當(dāng)前讀!

Mysql事務(wù)隔離級別原理實例解析

OK,注意看上表紅色部分!就是因為使用了next-key locks,innodb將PiD=1這條索引記錄,和(1,++∞)這個間隙鎖住了。其他事務(wù)要在這個間隙上插數(shù)據(jù),就會阻塞,從而防止幻讀發(fā)生!

有的人會說,你這第二次查詢的結(jié)果,也變了啊,明顯和第一次查詢結(jié)果不一樣啊?對此,我只能說,請看清楚啊。這是被自己

的事務(wù)改的,不是被其他事物修改的。這不算是幻讀,也不是不可重復(fù)讀。

總結(jié)

上面羅里吧嗦一大堆,最后來一個表格做總結(jié)吧,你面試答這個表就行。上面的一切是為了這張表做準備!

隔離級別 臟讀 不可重復(fù)讀 幻讀 讀未提交 是 是 是 不可重復(fù)讀 否 是 是 可重復(fù)讀 否 否 是 串行化 否 否 否

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91久久精品无嫩草影院| 亚洲一区激情| 青青青免费在线视频| 亚洲欧美成人综合| 国产精品jk白丝蜜臀av小说| 国产精品丝袜在线播放| 国产精品香蕉| 国产精品草草| 国产精品亲子伦av一区二区三区 | 日韩精品一区二区三区中文| 精精国产xxxx视频在线野外| 日韩毛片视频| 成人自拍av| 黄色国产精品| 亚洲欧美视频| 亚洲天堂av资源在线观看| 欧美a级一区| 久久久久午夜电影| 日韩精品欧美成人高清一区二区| 日本一区福利在线| 麻豆一区二区在线| 免费在线看一区| 日韩不卡在线| av中文资源在线资源免费观看| 日韩视频一区| 国产精品手机在线播放| 精品视频国产| 麻豆成人av在线| av免费不卡国产观看| 日韩精品亚洲aⅴ在线影院| 日韩精品一区二区三区中文| 伊人久久在线| 中文字幕人成乱码在线观看 | 亚洲精品乱码久久久久久蜜桃麻豆| 欧美aⅴ一区二区三区视频| 日本久久二区| 欧美日韩中文字幕一区二区三区| 亚洲风情在线资源| 欧美成人综合| 日韩久久精品| 玖玖精品视频| 日韩成人精品一区二区| 蜜桃av一区二区三区电影| 欧美日一区二区在线观看| 免费成人av在线播放| 一区二区精品| 美女黄网久久| 久久亚洲精品中文字幕| 九九综合九九| 国产乱码精品一区二区三区四区 | 激情综合婷婷| 视频在线观看91| 97精品97| 国产精品午夜一区二区三区| 免费成人在线视频观看| 欧美丝袜一区| 亚洲天堂日韩在线| 国产精品色在线网站| 午夜精品成人av| 欧美日韩夜夜| 欧美日韩色图| 国产精品探花在线观看| 欧美日韩精品一本二本三本| 国产精品美女久久久久久不卡| 欧美福利在线| 久久99国产精品视频| 免费精品视频最新在线| 波多视频一区| 国产午夜精品一区在线观看| 欧美日韩精品在线一区| 国产精品亚洲片在线播放| 亚洲欧美日韩在线观看a三区| 国产91在线播放精品| 新版的欧美在线视频| 亚洲精品一区二区在线播放∴| 亚洲一区二区三区高清| 99riav1国产精品视频| 国产精品午夜一区二区三区| 精品国产不卡| 亚洲精选久久| 国产婷婷精品| 欧美精品影院| 欧美一区激情| 日本成人在线一区| 在线日韩一区| 精品一区二区三区视频在线播放| 亚洲专区视频| 青草综合视频| 久久精品91| 日韩成人a**站| 免费日本视频一区| 国产精品毛片视频| 三级久久三级久久久| 欧美日韩精品免费观看视欧美高清免费大片 | 亚洲一区激情| 中文字幕av亚洲精品一部二部| 亚洲午夜精品久久久久久app| 麻豆理论在线观看| 欧美亚洲国产激情| 欧美日韩在线观看视频小说| 国产欧美日韩精品一区二区免费 | 在线一区电影| 成人在线视频免费看| 秋霞影视一区二区三区| 蜜臀va亚洲va欧美va天堂| 日韩视频免费| 亚洲97av| 亚洲精品免费观看| 天堂av在线| 国产美女视频一区二区| 免费在线观看精品| 免费观看久久久4p| 亚洲一区二区三区高清| 精品黄色一级片| 国产日韩免费| 国产精品一区二区精品视频观看 | 色综合www| 国产videos久久| 色综合狠狠操| 中文在线а√在线8| 日韩视频网站在线观看| 激情欧美丁香| 日韩午夜黄色| 在线亚洲观看| 久久国产99| 中文字幕日韩高清在线| 日韩中文av| 国产视频网站一区二区三区| 老牛影视一区二区三区| 亚洲欧美激情诱惑| 国产精品色在线网站| 国产精品22p| 精品一区视频| 婷婷亚洲五月| 日韩国产欧美一区二区三区| 中文字幕在线视频网站| 午夜欧美精品久久久久久久| 日本免费在线视频不卡一不卡二| 国产农村妇女精品一区二区| 午夜欧美精品久久久久久久| 欧美精品九九| 三级欧美在线一区| 日本天堂一区| 麻豆精品在线观看| 在线人成日本视频| 欧美va天堂在线| 亚洲自啪免费| 久久久久伊人| 日韩久久99| 爽爽淫人综合网网站| 国产成人1区| 亚洲精品福利| 亚洲午夜av| 成人国产精品久久| 国产伦精品一区二区三区千人斩 | 亚洲精一区二区三区| 激情久久久久久久| 99久精品视频在线观看视频| 亚洲视频综合| 日韩中文字幕亚洲一区二区va在线| 国产亚洲精品久久久久婷婷瑜伽| 91精品在线免费视频| 国产乱人伦丫前精品视频| 黄色在线网站噜噜噜| 亚洲一级高清| 日本不卡的三区四区五区| 久久免费福利| 亚洲高清影视| 四虎国产精品免费久久| 国产精品久久| 欧美激情一区| 91嫩草亚洲精品| 四虎精品永久免费| 蜜臀精品一区二区三区在线观看 | 亚洲精品韩国| 国产精品一区毛片| 麻豆mv在线观看| 蜜桃一区二区三区在线观看| 国产精选一区| 久久久久久美女精品| 日本中文字幕不卡| 最近高清中文在线字幕在线观看1| 免费日韩av片| 国产videos久久| 亚洲乱码视频| 日韩在线免费| 国产亚洲欧美日韩在线观看一区二区 | 久久精品国产福利| 精品一区亚洲| 国产精品s色| 久久先锋影音| 国产亚洲永久域名| 国产精选一区| 亚洲精品福利电影| www.com.cn成人| 91精品精品| 中文字幕日韩高清在线| 国产剧情一区| 亚洲无线一线二线三线区别av| 亚洲在线观看|