av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

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

詳解MySQL事務(wù)的隔離級(jí)別與MVCC

瀏覽:143日期:2023-10-03 17:25:23
事務(wù)隔離級(jí)別事務(wù)并發(fā)執(zhí)行遇到的問(wèn)題 臟寫 如果一個(gè)事務(wù)修改了另一個(gè)未提交事務(wù)修改過(guò)的數(shù)據(jù),那就意味著發(fā)生了臟寫 臟讀 如果一個(gè)事務(wù)讀到了另一個(gè)未提交事務(wù)修改過(guò)的數(shù)據(jù),那就意味著發(fā)生了臟讀 不可重復(fù)讀 如果一個(gè)事務(wù)只能讀到另一個(gè)已經(jīng)提交的事務(wù)修改過(guò)的數(shù)據(jù),并且其他事務(wù)每對(duì)該數(shù)據(jù)進(jìn)行一次修改并提交后,該事務(wù)都能查詢到最新值,那就意味著發(fā)生了不可重復(fù)讀 幻讀 如果一個(gè)事務(wù)先根據(jù)某些條件查詢出一些記錄,之后另一個(gè)事務(wù)又向表中插入了符合這些條件的記錄,原先的事務(wù)再次按照該條件查詢時(shí),能把另一個(gè)事務(wù)插入的記錄也讀出來(lái),那就意味著發(fā)生了幻讀。幻讀強(qiáng)調(diào)的是一個(gè)事務(wù)按照某個(gè)相同條件多次讀取記錄時(shí),后讀取時(shí)讀到了之前沒有讀到的記錄那對(duì)于先前已經(jīng)讀到的記錄,之后又讀取不到這種情況,算啥呢?其實(shí)這相當(dāng)于對(duì)每一條記錄都發(fā)生了不可重復(fù)讀的現(xiàn)象。幻讀只是重點(diǎn)強(qiáng)調(diào)了讀取到了之前讀取沒有獲取到的記錄。SQL標(biāo)準(zhǔn)中的四種隔離級(jí)別 READ UNCOMMITTED: 未提交讀 臟讀、不可重復(fù)讀、幻讀 發(fā)生 READ COMMITTED:已提交讀 不可重復(fù)讀、幻讀 發(fā)生 REPEATBLE READ:可重復(fù)讀 幻讀 發(fā)生 SERIALIZABLE:可串行化 不發(fā)生 MySQL中支持的四種隔離級(jí)別 MySQL在REPEATABLE READ隔離級(jí)別下,是可以禁止幻讀問(wèn)題的發(fā)生的(關(guān)于如何禁止我們之后會(huì)詳細(xì)說(shuō)明的) MySQL默認(rèn)隔離級(jí)別為REPEATABLE READ MVCC原理版本鏈

對(duì)于使用InnoDB存儲(chǔ)引擎的表來(lái)說(shuō),它的聚簇索引記錄中都包含兩個(gè)必要的隱藏列

trx_id:每次一個(gè)事務(wù)對(duì)某條聚簇索引記錄進(jìn)行改動(dòng)時(shí),都會(huì)把該事務(wù)的事務(wù)id賦值給trx_id隱藏列 roll_pointer:每次對(duì)某條聚簇索引記錄進(jìn)行改動(dòng)時(shí),都會(huì)把舊的版本寫入到undo日志,然后這個(gè)隱藏列就相當(dāng)于一個(gè)指針,可以通過(guò)它來(lái)找到該記錄修改前的信息。 ReadView 對(duì)于使用READ UNCIMMITTED隔離級(jí)別的事務(wù)來(lái)說(shuō),由于可以讀到未提交事務(wù)修改過(guò)的記錄,所以直接讀取記錄的最新版本就好了; 對(duì)于使用READ COMMITTED 和REPEATABLE READ 隔離級(jí)別的事務(wù)來(lái)說(shuō),都必須保證讀到已經(jīng)提交了的事務(wù)修改過(guò)的記錄,也就是說(shuō)假如另一個(gè)事務(wù)已經(jīng)修改了記錄但是尚未提交,是不能直接讀取到最新版本記錄的。核心問(wèn)題:需要判斷一下版本鏈中的哪個(gè)版本是當(dāng)前事務(wù)可見的。為此設(shè)計(jì)了readview readView包含4個(gè)比較重要的內(nèi)容: m_ids:表示在生成ReadView時(shí)當(dāng)前系統(tǒng)中活躍的讀寫事務(wù)的事務(wù)IDmin_trx_id:表示生成ReadView時(shí)當(dāng)前系統(tǒng)中活躍的讀寫事務(wù)中最小的事務(wù)id,也就是m_ids中的最小值max_trx_id: 表示生成ReadView時(shí)系統(tǒng)中應(yīng)該分配給下一個(gè)事務(wù)的id值creator_trx_id:表示生成該ReadView的事務(wù)的事務(wù)ID 我們前邊說(shuō)過(guò),只有在對(duì)表中的記錄做改動(dòng)時(shí)(執(zhí)行INSERT、DELETE、UPDATE這些語(yǔ)句時(shí))才會(huì)為事務(wù)分配事務(wù)id,否則在一個(gè)只讀事務(wù)中的事務(wù)id值都默認(rèn)為0。 有了這個(gè)ReadView,這樣在訪問(wèn)某條記錄時(shí),只需要按照下邊的步驟判斷記錄的某個(gè)版本是否可見: 如果被訪問(wèn)的版本的trx_id屬性與ReadView中的creator_trx_id相同,意味著當(dāng)前事務(wù)在訪問(wèn)它自己修改過(guò)的記錄,所以該版本可以被當(dāng)前事務(wù)訪問(wèn)如果被訪問(wèn)的trx_id屬性值小于ReadView中的min_trx_id值,表明生成該版本的事務(wù)在當(dāng)前事務(wù)生成ReadView時(shí)已經(jīng)提交,所以該版本可以被當(dāng)前事務(wù)訪問(wèn)如果被訪問(wèn)版本的trx_id屬性值大于或等于ReadView中的max_trx_id值,表明生成該版本的事務(wù)在當(dāng)前事務(wù)生成ReadView后才開啟,所以該版本不可以被當(dāng)前事務(wù)訪問(wèn)如果被訪問(wèn)版本的trx_id屬性值在ReadView的min_trx_id和max_trx_id之間,那就需要判斷一下trx_id屬性值是不是在m_ids列表中,如果在,說(shuō)明創(chuàng)建ReadView時(shí)生成該版本的事務(wù)還是活躍的,該版本不可被訪問(wèn);如果不在,說(shuō)明創(chuàng)建ReadView時(shí)生成該版本的事務(wù)已經(jīng)被提交,該版本可以被訪問(wèn)。

總結(jié)一下:

READ COMMITTED隔離級(jí)別的事務(wù)在每次查詢開始時(shí)都會(huì)生成一個(gè)獨(dú)立的ReadView REPEATABLE READ :在第一次讀取數(shù)據(jù)時(shí)生成一個(gè)ReadView,也就是說(shuō)兩次SELECT 查詢得到的結(jié)果是重復(fù)的。

MVCC總結(jié): 所謂的MVCC指的就是在使用 READ COMMITTED 和REPEATABLE READ 這兩種隔離級(jí)別的事務(wù)在執(zhí)行普通的SELECT 操作時(shí)訪問(wèn)的記錄的版本鏈的過(guò)程,這樣子可以使不用的事務(wù)的讀-寫、寫-讀操作并發(fā)執(zhí)行,從而提升性能。

mysql如何在RR級(jí)別解決幻讀的

1.當(dāng)前讀,讀的是最新版本,并且需要獲取對(duì)應(yīng)記錄的鎖,如下SQL

select ... lock in share mode select ... for update update 、delete 、insert

是通過(guò)next-key 來(lái)實(shí)現(xiàn)幻讀的

2.快照讀 是通過(guò)mvcc 來(lái)解決的

以上就是詳解MySQL事務(wù)的隔離級(jí)別與MVCC的詳細(xì)內(nèi)容,更多關(guān)于MySQL事務(wù)的隔離級(jí)別與MVCC的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
主站蜘蛛池模板: 九色91| 男女av在线| 美女黄色小说 | 在线免费av网站 | 国产精品麻豆视频 | 国产视频一区在线观看 | 国产精品高潮呻吟av | 九九精品国产 | 荤话粗俗h高h重口 | 4虎最新网址| 999热视频 | 国产三级久久 | 亚洲一区二区三区免费 | 成年人的免费视频 | 久久国产精品一区二区三区 | 性高潮久久久久久久 | 日韩在线视频免费观看 | 8x8ⅹ国产精品一区二区 | 欧美在线视频免费 | 精品国产乱码久久久久久蜜柚 | 日韩在线视频免费 | 一区二区三区中文字幕 | 久久精彩| 色天天综合 | av在线播放网站 | 免费看黄色网址 | 超碰成人网 | 国产乱人伦 | 午夜视频免费在线观看 | 一区二区在线视频 | 玖玖伊人 | 国产精品视频免费 | 一级免费黄色片 | 成人xxx| 日韩 国产 欧美 | 国产日韩亚洲 | 69人人| 中文文字幕文字幕高清 | 久久精品视频一区二区 | 国产精品久久久久久久成人午夜 | 精品国产乱码久久久久 |