国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

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

2024-07-24 12:54:37
字體:
供稿:網(wǎng)友

引言

大家在面試中一定碰到過

說說事務(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)容你可以看完后,你完全可以當概念記在腦海里,除非官網(wǎng)的開發(fā)手冊是錯的,否則應(yīng)當無誤!

另外,本文會重點說一下

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

正文

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

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


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

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

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

pId name
1 zhangsan

1、讀未提交(READ_UNCOMMITTED)

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

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

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

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

其內(nèi)容為

**dirty read
An 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ù)讀和幻讀一定是存在的。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 华蓥市| 醴陵市| 宁武县| 昌黎县| 炉霍县| 宿州市| 兰州市| 任丘市| 增城市| 西华县| 隆回县| 贵港市| 沐川县| 海丰县| 霞浦县| 松江区| 赤峰市| 建宁县| 蒙阴县| 昌黎县| 乐安县| 青海省| 辽源市| 隆德县| 永定县| 瓦房店市| 祁门县| 通化市| 潜江市| 克山县| 时尚| 富锦市| 长兴县| 鲁甸县| 杭锦后旗| 雷山县| 巩留县| 邢台县| 巩留县| 墨脱县| 鄢陵县|