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

您的位置:首頁技術文章
文章詳情頁

Mysql事務隔離級別原理實例解析

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

引言

大家在面試中一定碰到過

說說事務的隔離級別吧?

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

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

本文所講大部分內容,皆有官網作為佐證,因此對本文內容你可以看完后,你完全可以當概念記在腦海里,除非官網的開發手冊是錯的,否則應當無誤!

另外,本文會重點說一下

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

正文

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

這里,大家記住一點,根據臟讀、不可重復讀、幻讀定義來看(自己總結,官網沒有),有如下包含關系:

Mysql事務隔離級別原理實例解析

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

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

假設有表tx_tb如下,pId為主鍵

pId name 1 zhangsan

1、讀未提交(READ_UNCOMMITTED)

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

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

官網對臟讀定義的地址為

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

其內容為

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

翻譯過來就是

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

你會發現,我們的演示結果和官網對臟讀的定義一致。根據我們最開始的推理,如果存在臟讀,那么不可重復讀和幻讀一定是存在的。

2、讀已提交(READ_COMMITTED)

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

Mysql事務隔離級別原理實例解析

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

官網對不可重復讀定義的地址為

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

其內容為

**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).**

翻譯過來就是

一個查詢語句檢索數據,隨后又有一個查詢語句在同一個事務中檢索數據,兩個數據應該是一樣的,但是實際情況返回了不同的結果。!

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

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

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

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

官網對幻讀定義的地址為

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.

翻譯過來就是

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

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

Mysql事務隔離級別原理實例解析

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

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

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

原文內容如下

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”).

按照原本這句話的意思,應該是

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

結果估計,某個國內翻譯人員翻著翻著變成了

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

然后大家繼續你抄我,我抄你,結果你懂的!

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

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操作均為當前讀!

Mysql事務隔離級別原理實例解析

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

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

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

總結

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
99tv成人| 亚州av日韩av| 日韩精品导航| 欧美日韩亚洲一区| 激情久久99| 日韩在线一二三区| 国产日产高清欧美一区二区三区 | 99久久婷婷这里只有精品| 国产精品a级| 国产精品亚洲综合在线观看| 激情综合亚洲| 国产激情精品一区二区三区| 婷婷激情一区| 日本成人在线网站| 欧美a级一区二区| 国产精品毛片| 国产精品欧美三级在线观看| 国产伦一区二区三区| 99久久婷婷| 欧美日韩黄网站| 国产中文欧美日韩在线| 日韩欧美美女在线观看| 蜜桃av在线播放| 精品一区不卡| 国产+成+人+亚洲欧洲在线| 亚洲欧美久久久| 国产伦乱精品| 国产一区日韩| 国产精品一区三区在线观看| 日韩在线二区| 欧美日韩视频一区二区三区| 激情综合婷婷| 亚洲精品一二| 精品视频亚洲| 911亚洲精品| 亚洲在线国产日韩欧美| 欧美日本不卡| 免费人成精品欧美精品| 日本久久综合| 久久只有精品| 国产精品欧美一区二区三区不卡| 免费看日韩精品| 四虎成人av| 国产精品欧美在线观看| 婷婷综合亚洲| 亚洲黄色中文字幕| 欧美激情综合| 国产精品毛片视频| 久久中文字幕av| 久久影院资源站| 老司机精品视频网| 老牛影视一区二区三区| 天堂а√在线最新版中文在线| 久久亚洲电影| 婷婷六月综合| 欧美精品国产一区| 日韩在线观看中文字幕| 天堂俺去俺来也www久久婷婷| 久久久久久夜| 国产欧美日韩免费观看| 亚洲最大av| 日韩专区精品| 久久久久久久久99精品大| 天堂√中文最新版在线| 蜜臀久久99精品久久久画质超高清 | 羞羞答答国产精品www一本| 欧美aa国产视频| 国产经典一区| 91综合视频| 9999国产精品| 石原莉奈在线亚洲三区| 亚洲一区有码| 日本亚州欧洲精品不卡| 女人天堂亚洲aⅴ在线观看| 九九九精品视频| 欧美日一区二区在线观看| 五月天久久777| 三上亚洲一区二区| 国产v综合v| av一区二区高清| 亚洲欧美日本日韩| 日韩精品视频一区二区三区| 日本中文字幕视频一区| 日韩高清在线一区| 久久一区欧美| 国产一区二区三区免费在线| 高潮一区二区| 亚洲女同中文字幕| 中文字幕日韩高清在线| 精品黄色一级片| 国产乱码精品一区二区亚洲| 精品成人18| 久久一区二区中文字幕| 新版的欧美在线视频| 亚洲欧洲午夜| 欧美一区在线观看视频| 天堂av在线一区| 国产极品嫩模在线观看91精品| 国语对白精品一区二区| 国产欧美一区二区色老头| 国产综合色区在线观看| 精品视频久久| 美日韩一区二区三区| 国产v日韩v欧美v| 精品久久精品| 中文一区一区三区免费在线观| 国产日韩欧美一区在线| 日韩一区二区免费看| 国产精品一二| 五月天久久久| 午夜宅男久久久| 国产一区二区三区不卡视频网站 | 久久免费福利| 香蕉精品视频在线观看| 黄色成人91| 成人午夜亚洲| 亚洲小说春色综合另类电影| 亚洲欧美久久精品| 日本精品不卡| 国产欧美高清视频在线| 国产精品中文字幕亚洲欧美| 日本成人在线一区| 日韩欧美一区二区三区免费看| 蜜桃av一区二区三区电影| 三级亚洲高清视频| 久久国产日韩欧美精品| 啪啪亚洲精品| 亚洲精品在线观看91| 蜜桃av一区二区三区电影| 中文字幕在线视频网站| 日韩黄色在线观看| 欧美激情麻豆| 亚洲视频国产| 欧美1区免费| 美女一区网站| 日韩精品免费一区二区三区| 久久国产成人午夜av影院宅| 激情欧美亚洲| 在线看片国产福利你懂的| 日本免费在线视频不卡一不卡二| 红杏一区二区三区| 国产在线日韩精品| 99xxxx成人网| 精品国产免费人成网站| 蜜桃av一区二区| 午夜久久一区| 国产精品二区不卡| 久久国产精品免费一区二区三区| 欧美亚洲精品在线| 国产精品毛片久久| 国产精品手机在线播放| 亚洲一区二区小说| 日本蜜桃在线观看视频| 亚洲欧美日韩在线观看a三区| 青青草精品视频| 伊人国产精品| 亚洲一区二区av| 久久亚洲国产| 国产午夜久久| 粉嫩av一区二区三区四区五区| 男女激情视频一区| 91视频久久| 国产欧美激情| 免费视频最近日韩| 98精品久久久久久久| 日本不卡视频在线| 亚洲精品在线观看91| 久久字幕精品一区| 亚洲婷婷丁香| 日韩久久精品| 国产美女久久| 婷婷色综合网| 9999国产精品| 久久国产三级| 免费日韩视频| av亚洲一区二区三区| 免费在线亚洲| 91精品尤物| 一区二区91| 最新国产拍偷乱拍精品| 在线中文字幕播放| 国产精品日本一区二区三区在线| 亚洲综合色婷婷在线观看| 91九色精品国产一区二区| 岛国精品一区| 国产伦精品一区二区三区千人斩 | 人人爽香蕉精品| 激情综合自拍| 亚洲欧洲高清| 国产精品毛片久久| 精品国产一区二区三区av片| 91成人福利| 日韩精品一级| 中文字幕乱码亚洲无线精品一区| 亚洲精品一区二区妖精| 国产精品免费精品自在线观看| 日韩国产在线观看| 日韩和欧美的一区| 奇米亚洲欧美| 91福利精品在线观看|