亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > MySQL隔離級別和鎖機制的深入講解

MySQL隔離級別和鎖機制的深入講解

熱門標簽:外東北地圖標注 話務(wù)外呼系統(tǒng)怎么樣 拉卡拉外呼系統(tǒng) 高清地圖標注道路 臨清電話機器人 大眾點評星級酒店地圖標注 云南電商智能外呼系統(tǒng)價格 智能外呼系統(tǒng)復(fù)位 400電話可以辦理嗎

簡述:

我們的MySQL一般會并發(fā)的執(zhí)行多個事務(wù),多個事務(wù)可能會并發(fā)的對同一條或者同一批數(shù)據(jù)進行crud操作;可能就會導(dǎo)致我們平常所說的臟讀、不可重復(fù)讀、幻讀這些問題.

這些問題的本質(zhì)都是MySQL多事務(wù)并發(fā)問題,為了解決多事務(wù)并發(fā)問題,MySQL設(shè)計了鎖機制、MVCC多版本并發(fā)控制隔離機制、以及事務(wù)隔離機制,用一整套機制來解決多事務(wù)并發(fā)所出現(xiàn)的問題.

1. 事務(wù)的四大特性

特性 特點
Atomicity(原子性) 事務(wù)是不可分割的,其對數(shù)據(jù)的修改,要么全都執(zhí)行,要么全都不執(zhí)行
Consistency(一致性) 在事務(wù)提交的前后的狀態(tài)和數(shù)據(jù)都必須是一致的
Isolation(隔離性) 在多事務(wù)并發(fā)時,保證事務(wù)不受并發(fā)操作影響的"獨立"環(huán)境執(zhí)行,這就意味著事務(wù)處理過程中的中間狀態(tài)對外部是不可見的,反之亦然
Druability(持久性) 指事務(wù)一旦提交,數(shù)據(jù)就持久化保存到磁盤中不會丟失

2.多事務(wù)并發(fā)帶來的問題

問題 現(xiàn)象 描述
臟讀 A事務(wù)正在對一條記錄做修改,在A事務(wù)完成并提交前,這條記錄的數(shù)據(jù)就處于不一致的狀態(tài)(有可能回滾也有可能提交),與此同時,B事務(wù)也來讀取同一條記錄,如果不加控制,B事務(wù)讀取了這些"臟"數(shù)據(jù),并據(jù)此作進一步處理,就會產(chǎn)生未提交的數(shù)據(jù)以來關(guān)系 一個事務(wù)中讀取到另一個事務(wù)尚未提交的數(shù)據(jù),不符合一致性要求
不可重復(fù)讀 一個事務(wù)在讀取某些數(shù)據(jù)后的某個時間,再次讀取以前讀過的數(shù)據(jù),卻發(fā)現(xiàn)其讀出的數(shù)據(jù)已經(jīng)發(fā)生了改變或某些記錄已經(jīng)被刪除了 一個事務(wù)中多次讀取的數(shù)據(jù)不一致,原因是收到其他事務(wù)已提交update的干擾,不符合隔離性
幻讀 一個事務(wù)按相同的查詢條件重新讀取以前查詢過的數(shù)據(jù),卻發(fā)現(xiàn)其他事務(wù)插入滿足其查詢條件的新數(shù)據(jù) 一個事務(wù)中多次讀取的數(shù)據(jù)不一致,原因是受其他事務(wù)已提交insert/delete的干擾,不符合隔離性

3.事務(wù)的隔離級別

臟讀、不可重復(fù)讀和幻讀,其實都是MySQL讀一致性問題,必須由數(shù)據(jù)庫提供一定的事務(wù)隔離機制來解決.

隔離級別 臟讀 不可重復(fù)讀 幻讀
Read uncommitted(讀未提交)
Read committed(讀已提交) ×
Repetatble read(可重復(fù)讀)(MySQL默認) × ×
Serializable(串行化) × × ×

查看當(dāng)前數(shù)據(jù)庫的事務(wù)隔離級別:show variables like ‘tx_isolation';

設(shè)置事務(wù)隔離級別:set tx_isolation='隔離級別'

4.演示不同隔離級別出現(xiàn)的問題

mysql版本:5.7.34

涉及表:

兩個MySQL客戶端

客戶端A ===================> 客戶端B(下面每張圖片兩個客戶端皆以第一張圖命名為準

讀未提交

1.1 設(shè)置事務(wù)隔離級別set tx_isolation=‘read-uncommitted';

1.2 客戶端A和客戶端B各開啟一個事務(wù),

1.3 客戶端A只做查詢,客戶端B對id = 1的記錄做修改;

1.4 再兩個事務(wù)都未提交的情況下,事務(wù)A讀到了事務(wù)B修改后的數(shù)據(jù)

1.5 一旦客戶端B的事務(wù)因為某種原因rollback,那么客戶端A查詢到的數(shù)據(jù)其實就是臟數(shù)據(jù),不符合一致性的要求

讀已提交

2.1 設(shè)置隔離級別讀已提交:set tx_isolation=‘read-committed';

2.2 客戶端A和客戶端B各開啟一個事務(wù),

2.3 客戶端A只做查詢,客戶端B對id = 1的記錄做修改;

2.4 客戶端B未提交事務(wù)時,客戶端A不能查詢客戶端B未提交的數(shù)據(jù),解決了臟讀的問題

2.5 當(dāng)客戶端B提交事務(wù)后,客戶端A再次對表進行查詢,結(jié)果與上一步不一致,即產(chǎn)生了不可重復(fù)讀的問題,不符合隔離性

可重復(fù)讀

3.1 設(shè)置隔離級別可重復(fù)讀:set tx_isolation=‘repeatable-read';

3.2 客戶端A和客戶端B各開啟一個事務(wù),

3.3 客戶端B修改表中數(shù)據(jù)然后提交;

3.4 客戶端A查詢表中數(shù)據(jù),并未出現(xiàn)與上一步不一致的問題,解決了不可重復(fù)讀的問題

3.5 在客戶端A中執(zhí)行update account set balance = balance - 100 where id = 1;blance并未有變成800-100=700;而是使用客戶端B提交后的數(shù)據(jù)來算的,所以是600;數(shù)據(jù)的一致性并沒有被破壞;可重復(fù)讀的隔離級別下使用的是MVCC機制,select操作不會更新版本號,是快照讀(歷史版本),保證同一事務(wù)下的可重復(fù)讀;insert/update/delete會更新版本號,是當(dāng)前讀(當(dāng)前版本)保證數(shù)據(jù)的一致性

3.6 客戶端B重新開啟一個事務(wù)插入一條數(shù)據(jù)后提交

3.7 在客戶端A中重新查詢表數(shù)據(jù),并沒有出現(xiàn)客戶端B剛才新增的數(shù)據(jù),沒有出現(xiàn)幻讀

3.8 驗證幻讀:在客戶端A中,對id = 4 的數(shù)據(jù)做修改;可以更新成功;再次進行查詢就能查詢出客戶端B新增的數(shù)據(jù),出現(xiàn)幻讀問題,不符合隔離性

串行化

4.1 設(shè)置隔離級別串行化:set tx_isolation=‘serializable';

4.2 客戶端A和客戶端B各開啟一個事務(wù),

4.3 客戶端A先查詢表中id = 1的數(shù)據(jù)

4.4 在客戶端A事務(wù)未提交時,客戶端B對表中id = 1 的數(shù)據(jù)做更新;由于客戶端A的事務(wù)并沒有提交,客戶端B的更新動作將會阻塞至到客戶端A提交事務(wù)或者超時,超時SQL報錯:Lock wait timeout exceeded; try restarting transaction

4.5 在客戶端B中更新id = 2 的數(shù)據(jù)卻可以成功,說明在串行化的隔離級別下,innodb的查詢也會被加上行鎖;

4.6 如果客戶端A執(zhí)行的是一個范圍查詢,那么該范圍內(nèi)的所有行包括每行記錄所在的間隙區(qū)間范圍(就算該行未被插入也會加鎖,這種是間隙鎖)都會被加鎖,此時如果客戶端B對該范圍內(nèi)的數(shù)據(jù)做任何操作都會被阻塞;所以就避免了幻讀;

4.7 串行化這種隔離級別并發(fā)性極低,所以再真實的開發(fā)很少會遇到,這也是MySQL為什么使用可重復(fù)讀作為默認的隔離級別的重要原因

5.鎖機制

MySQL默認的隔離級別是可重復(fù)讀,可是還是會出現(xiàn)幻讀問題;間隙鎖再某種情況下可以解決幻讀問題;

間隙鎖

概述:間隙鎖,鎖的就是兩個值之間的空隙.

假設(shè)表中數(shù)據(jù)如下:

那么間隙就有(4,10)、(10,15)和(15,正無窮)三個間隙;

1.1 設(shè)置隔離級別可重復(fù)讀:set tx_isolation=‘repeatable-read';

1.2 客戶端A和客戶端B各開啟一個事務(wù),

1.3 在客戶端A執(zhí)行update account set balance = 1000 where id > 5 and id 13 ;

1.4 在客戶端A未提交的時候,客戶端B是沒有辦法對這個范圍包含的所有行記錄(包括間隙行記錄)以及行記錄所在間隙里執(zhí)行insert/update操作,即4id=15這個區(qū)間內(nèi)都無法修改數(shù)據(jù),id = 15 同樣不能修改;

1.5 間隙鎖只有在可重復(fù)讀的隔離級別下才會生效

臨建鎖

概述:臨建鎖是行鎖和間隙鎖的結(jié)合,想上面那個4id=15就屬于臨建鎖;

無索引行鎖會升級成為表鎖

3.1 客戶端A和客戶端B各開啟一個事務(wù),

3.2 在客戶端A執(zhí)行update account set balance = 1000 where name = ‘李四';

3.3 在客戶端A未提交的時候,客戶端B執(zhí)行update account set balance = 800 where id = 15 ;同樣會被阻塞至客戶端A提交或者超時;

3.4 MySQL中的鎖主要是加載索引字段上,如果使用再非索引字段上,行鎖會升級成表鎖;

排他鎖

4.1 客戶端A和客戶端B各開啟一個事務(wù),

4.2 在客戶端A執(zhí)行select * from account where id = 1 for update ;

4.3 在客戶端A未提交的時候,客戶端B執(zhí)行update account set balance = 800 where id = 1 ;會被阻塞至客戶端A提交或者超時;

結(jié)論:Innodb引擎實現(xiàn)了行鎖,雖然行鎖機制實現(xiàn)方面所帶來的性能損耗可能比表級鎖定會更高,但是再整體并發(fā)處理能力肯定要強于表級鎖;當(dāng)系統(tǒng)并發(fā)量高的時候,行級鎖和表級鎖相比就會有比較明顯的優(yōu)勢;但是行級鎖使用起來也比表級鎖復(fù)雜,當(dāng)我們使用不當(dāng)?shù)臅r候,可能會使行鎖的性能不僅不比表級鎖的性能高,甚至可能會更差.

為什么行鎖鎖定的粒度小,開銷反而會比表級鎖的開銷大?

因為表級鎖只需要找到當(dāng)前表就可以進行加鎖,行鎖的話需要對表中記錄進行掃描,直至掃描到需要加鎖的行才可以進行加鎖,所以行鎖的開銷是比表級鎖的開銷要來得大的.

真實開發(fā)情況下對鎖優(yōu)化的一些建議:

  • 合理使用索引字段加鎖,縮小鎖的范圍
  • 盡可能讓所有鎖都加到索引字段上,避免無索引行鎖升級成表鎖
  • 盡可能減少查詢范圍,避免間隙過大的間隙鎖
  • 盡可能低級別事務(wù)隔離
  • 盡可能控制事務(wù)大小,減少鎖定資源量,涉及事務(wù)加鎖的sql盡量放在事務(wù)最后執(zhí)行,減少加鎖的時間

總結(jié)

到此這篇關(guān)于MySQL隔離級別和鎖機制的文章就介紹到這了,更多相關(guān)MySQL隔離級別和鎖機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • MySQL鎖機制與用法分析
  • MySQL InnoDB中的鎖機制深入講解
  • mysql中的鎖機制深入講解
  • MySQL數(shù)據(jù)庫鎖機制原理解析
  • mysql中鎖機制的最全面講解

標簽:溫州 阿里 揚州 無錫 福州 定西 山西 三明

巨人網(wǎng)絡(luò)通訊聲明:本文標題《MySQL隔離級別和鎖機制的深入講解》,本文關(guān)鍵詞  MySQL,隔離,級別,和,鎖,機制,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL隔離級別和鎖機制的深入講解》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL隔離級別和鎖機制的深入講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    精品视频一区二区| 美女免费黄网站| 国产成人精品综合| 台湾毛片| 午夜欧美福利| 欧美国产日韩在线| 韩国毛片免费大片| 久久精品免视看国产成人2021| 国产一区二区精品| 欧美另类videosbestsex| 日韩男人天堂| 美女免费精品高清毛片在线视 | 日韩av片免费播放| 国产一区二区福利久久| 黄色福利| 久久99欧美| 亚洲天堂一区二区三区四区| 日韩在线观看免费完整版视频| 国产国语对白一级毛片| 青青久久国产成人免费网站| 国产a视频| 日韩中文字幕一区| 色综合久久久久综合体桃花网| 亚洲 欧美 91| 亚州视频一区二区| 青青青草影院| 午夜在线观看视频免费 成人| 精品视频在线观看视频免费视频| 亚洲精品永久一区| 麻豆系列 在线视频| 尤物视频网站在线观看| 精品国产香蕉在线播出| 成人高清视频免费观看| 天天做人人爱夜夜爽2020 | 久久国产一久久高清| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 九九免费精品视频| 国产不卡在线播放| 高清一级片| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产亚洲精品成人a在线| 免费一级片在线| 亚欧乱色一区二区三区| 久久久成人网| 91麻豆精品国产高清在线| 亚欧视频在线| 黄视频网站免费观看| 久久国产一区二区| 成人影视在线播放| 91麻豆精品国产自产在线| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 欧美一级视频高清片| a级精品九九九大片免费看| 国产不卡福利| 欧美日本韩国| 一本伊大人香蕉高清在线观看| 四虎精品在线观看| 99久久网站| 欧美日本韩国| 久久精品免视看国产明星| 久久国产一久久高清| 国产高清在线精品一区二区| 成人高清视频免费观看| 日日日夜夜操| 天堂网中文字幕| 国产91精品一区| 黄视频网站在线免费观看| 韩国三级香港三级日本三级| 国产极品精频在线观看| 国产极品白嫩美女在线观看看| 国产一区二区精品| 日本在线不卡免费视频一区| 久久精品道一区二区三区| 亚欧乱色一区二区三区| 国产精品自拍在线观看| 国产91精品一区二区| 精品久久久久久中文| 欧美a级大片| 日韩中文字幕在线观看视频| 99色视频在线观看| 一级毛片视频播放| 国产精品自拍亚洲| 香蕉视频一级| 91麻豆国产| 国产精品免费久久| 欧美大片毛片aaa免费看| 中文字幕一区二区三区 精品 | 高清一级片| 精品国产三级a| 九九免费高清在线观看视频| 四虎影视库| 九九九网站| 九九久久99综合一区二区| 超级乱淫伦动漫| 国产精品123| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产成人女人在线视频观看 | 精品国产亚一区二区三区| 999久久久免费精品国产牛牛| 91麻豆精品国产片在线观看| 久久精品免视看国产明星| 99色播| 四虎久久影院| 日韩一级黄色| 亚洲精品中文一区不卡| 日韩在线观看视频黄| 国产美女在线一区二区三区| 成人影院一区二区三区| 沈樵在线观看福利| 日韩av东京社区男人的天堂| 欧美另类videosbestsex| 欧美a级片免费看| 亚洲天堂免费观看| 日日夜人人澡人人澡人人看免| 亚洲www美色| 精品视频在线观看视频免费视频| 四虎论坛| 九九精品久久| 久久久成人影院| 日本乱中文字幕系列 | 欧美国产日韩在线| 日韩中文字幕一区二区不卡| 毛片成人永久免费视频| 精品视频在线观看视频免费视频| 国产麻豆精品免费密入口| 日本特黄一级| 九九免费精品视频| 欧美a级片免费看| 久久国产精品自由自在| 色综合久久天天综合| 亚洲 男人 天堂| 91麻豆tv| 日韩av东京社区男人的天堂| 青青久在线视频| 日本在线不卡视频| 欧美激情中文字幕一区二区| 午夜在线亚洲| 日韩在线观看免费完整版视频| 国产综合成人观看在线| 美女免费毛片| 99热热久久| 国产网站免费观看| 国产一区国产二区国产三区| 欧美激情在线精品video| 国产伦理精品| 久久久成人网| 日本免费看视频| 精品在线视频播放| 四虎影视库| 高清一级片| 韩国毛片免费大片| 国产精品免费久久| 亚洲女初尝黑人巨高清在线观看| 免费一级生活片| 日本特黄特黄aaaaa大片| 日韩av东京社区男人的天堂| 精品国产亚洲人成在线| 四虎影视库| 亚洲 国产精品 日韩| 黄色免费网站在线| 成人高清免费| 精品视频免费看| 一级毛片视频播放| 精品久久久久久综合网| 国产91视频网| 黄视频网站在线看| 亚洲天堂一区二区三区四区| 成人在免费观看视频国产| 91麻豆精品国产综合久久久| 精品久久久久久综合网| 免费的黄视频| 国产极品白嫩美女在线观看看| 日韩免费在线视频| 国产麻豆精品免费密入口| 四虎精品在线观看| 精品在线视频播放| 中文字幕一区二区三区精彩视频| 91麻豆tv| 999久久狠狠免费精品| 精品国产一区二区三区免费| 精品国产三级a| 青青青草影院| 日韩男人天堂| 韩国三级香港三级日本三级la| 韩国毛片免费大片| 精品视频在线看| 精品国产一区二区三区久久久狼| 国产一区二区精品尤物| 黄视频网站免费| 色综合久久天天综合观看| 久久99欧美| 国产一区二区精品| 精品视频在线看| 沈樵在线观看福利| 色综合久久天天综合| 黄色短视频网站| 麻豆系列 在线视频| 国产网站麻豆精品视频| 四虎影视久久| 国产欧美精品午夜在线播放|