校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

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

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

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

簡述:

我們的MySQL一般會并發的執行多個事務,多個事務可能會并發的對同一條或者同一批數據進行crud操作;可能就會導致我們平常所說的臟讀、不可重復讀、幻讀這些問題.

這些問題的本質都是MySQL多事務并發問題,為了解決多事務并發問題,MySQL設計了鎖機制、MVCC多版本并發控制隔離機制、以及事務隔離機制,用一整套機制來解決多事務并發所出現的問題.

1. 事務的四大特性

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

2.多事務并發帶來的問題

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

3.事務的隔離級別

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

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

查看當前數據庫的事務隔離級別:show variables like ‘tx_isolation';

設置事務隔離級別:set tx_isolation='隔離級別'

4.演示不同隔離級別出現的問題

mysql版本:5.7.34

涉及表:

兩個MySQL客戶端

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

讀未提交

1.1 設置事務隔離級別set tx_isolation=‘read-uncommitted';

1.2 客戶端A和客戶端B各開啟一個事務,

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

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

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

讀已提交

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

2.2 客戶端A和客戶端B各開啟一個事務,

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

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

2.5 當客戶端B提交事務后,客戶端A再次對表進行查詢,結果與上一步不一致,即產生了不可重復讀的問題,不符合隔離性

可重復讀

3.1 設置隔離級別可重復讀:set tx_isolation=‘repeatable-read';

3.2 客戶端A和客戶端B各開啟一個事務,

3.3 客戶端B修改表中數據然后提交;

3.4 客戶端A查詢表中數據,并未出現與上一步不一致的問題,解決了不可重復讀的問題

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

3.6 客戶端B重新開啟一個事務插入一條數據后提交

3.7 在客戶端A中重新查詢表數據,并沒有出現客戶端B剛才新增的數據,沒有出現幻讀

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

串行化

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

4.2 客戶端A和客戶端B各開啟一個事務,

4.3 客戶端A先查詢表中id = 1的數據

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

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

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

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

5.鎖機制

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

間隙鎖

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

假設表中數據如下:

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

1.1 設置隔離級別可重復讀:set tx_isolation=‘repeatable-read';

1.2 客戶端A和客戶端B各開啟一個事務,

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

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

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

臨建鎖

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

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

3.1 客戶端A和客戶端B各開啟一個事務,

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

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

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

排他鎖

4.1 客戶端A和客戶端B各開啟一個事務,

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

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

結論:Innodb引擎實現了行鎖,雖然行鎖機制實現方面所帶來的性能損耗可能比表級鎖定會更高,但是再整體并發處理能力肯定要強于表級鎖;當系統并發量高的時候,行級鎖和表級鎖相比就會有比較明顯的優勢;但是行級鎖使用起來也比表級鎖復雜,當我們使用不當的時候,可能會使行鎖的性能不僅不比表級鎖的性能高,甚至可能會更差.

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

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

真實開發情況下對鎖優化的一些建議:

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

總結

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

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

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

巨人網絡通訊聲明:本文標題《MySQL隔離級別和鎖機制的深入講解》,本文關鍵詞  MySQL,隔離,級別,和,鎖,機制,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL隔離級別和鎖機制的深入講解》相關的同類信息!
  • 本頁收集關于MySQL隔離級別和鎖機制的深入講解的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美日韩亚洲国产综合| 成人福利在线看| 亚洲制服丝袜在线| 亚洲激情一二三区| 日韩国产欧美在线播放| 精品一区二区三区久久| a在线欧美一区| 日本aⅴ亚洲精品中文乱码| 国产99精品国产| 欧美午夜精品久久久久久孕妇 | 色就色 综合激情| 91精品国产日韩91久久久久久| 亚洲综合一区二区精品导航| 一本大道久久a久久综合| 亚洲欧洲美洲综合色网| 亚洲综合图片区| 成人午夜私人影院| 欧美精品乱码久久久久久按摩| 国产视频一区二区在线| 亚洲影院久久精品| 高清在线成人网| 91麻豆精品国产综合久久久久久| 26uuu亚洲综合色| 亚洲一级片在线观看| 国产凹凸在线观看一区二区 | 国产精品久久久久aaaa樱花| 手机精品视频在线观看| 一本一道久久a久久精品| 欧美经典一区二区| 精品写真视频在线观看| 欧美疯狂性受xxxxx喷水图片| 亚洲美女视频在线| 在线视频欧美区| 国产精品色在线观看| 国产精品亚洲午夜一区二区三区 | 国产精品丝袜久久久久久app| 日韩成人一级片| 日韩女同互慰一区二区| 蜜臀久久久99精品久久久久久| 欧美午夜精品免费| 亚洲小少妇裸体bbw| 在线观看国产一区二区| 亚洲欧美偷拍另类a∨色屁股| 丁香亚洲综合激情啪啪综合| 亚洲国产精品精华液ab| 国产又黄又大久久| 国产精品天干天干在线综合| 成人午夜电影网站| 亚洲美女电影在线| 91国偷自产一区二区开放时间| 一区二区三区日韩在线观看| 欧美丰满美乳xxx高潮www| 美腿丝袜亚洲一区| 亚洲国产精品高清| 欧美色爱综合网| 国产久卡久卡久卡久卡视频精品| 久久午夜色播影院免费高清| 在线视频欧美区| 国产成人在线观看免费网站| 亚洲黄色小说网站| 精品国产乱码久久久久久浪潮| 色综合久久天天| 精品一二三四在线| 老司机精品视频一区二区三区| 亚洲欧美另类久久久精品2019| 26uuu久久天堂性欧美| 欧美一区二区精品在线| 欧美精品一卡两卡| 欧美日韩精品一区二区三区蜜桃| 成人黄色av网站在线| 国产91富婆露脸刺激对白| 国产一区二区久久| 国产成人在线网站| 国产不卡高清在线观看视频| 自拍视频在线观看一区二区| 久久嫩草精品久久久久| 色综合久久中文综合久久牛| 粉嫩av一区二区三区粉嫩| 日韩国产欧美在线视频| 亚洲主播在线播放| 亚洲人成精品久久久久| 久久精品视频在线看| 日韩精品自拍偷拍| 亚洲精品一区二区精华| 91精品国产综合久久香蕉麻豆| 色视频一区二区| 91精品国产欧美一区二区成人| 欧美性感一类影片在线播放| 欧美午夜在线一二页| 欧美一区二区三区公司| 在线亚洲一区二区| 欧美日韩1234| 欧美xxxx老人做受| 欧美国产欧美综合| 自拍视频在线观看一区二区| 亚洲一区二区三区中文字幕| 亚洲超丰满肉感bbw| 日韩av二区在线播放| 国产精品99久久久久久久vr| 91在线一区二区三区| 69堂成人精品免费视频| 久久综合给合久久狠狠狠97色69| 亚洲国产激情av| 五月激情六月综合| 成人国产在线观看| 欧美性一二三区| 国产视频一区二区在线| 亚洲一区在线视频| 99国产一区二区三精品乱码| 国产精品一级在线| 欧美精品乱码久久久久久按摩| 久久久国产精品午夜一区ai换脸| 亚洲一区二区三区四区五区黄 | 欧美精品1区2区3区| 专区另类欧美日韩| 成人免费毛片a| 欧美精品久久久久久久久老牛影院| 国产精品污网站| 久久激情五月婷婷| 欧美日韩国产123区| 亚洲国产日韩av| 97国产一区二区| 亚洲婷婷综合色高清在线| 国产aⅴ综合色| 中文字幕av一区二区三区免费看| 蜜桃av噜噜一区二区三区小说| 欧美丰满少妇xxxxx高潮对白| 亚洲国产精品影院| 欧美日韩精品三区| 午夜电影一区二区三区| 制服丝袜亚洲网站| 亚洲国产成人av| 7777女厕盗摄久久久| 日韩av高清在线观看| 精品少妇一区二区三区免费观看 | 精品毛片乱码1区2区3区| 激情综合网最新| 国产精品久久久久久久久动漫 | 另类欧美日韩国产在线| 日韩免费看网站| 国产高清一区日本| 亚洲人一二三区| 色94色欧美sute亚洲线路二| 亚洲美女屁股眼交| 91麻豆精品国产91久久久资源速度 | 亚洲视频综合在线| 精品三级av在线| 在线视频综合导航| 激情欧美日韩一区二区| 一区在线中文字幕| 精品免费99久久| 欧美日韩一区国产| 9l国产精品久久久久麻豆| 亚洲一区二区三区小说| 国产三级欧美三级日产三级99| av电影一区二区| 韩国三级中文字幕hd久久精品| 国产精品久久久久久久久快鸭| 日韩一区二区在线免费观看| 91视频一区二区| www.一区二区| 国产乱码精品一区二区三区忘忧草 | 成人av午夜电影| 色综合久久久网| 日本久久电影网| 99精品久久99久久久久| 国产一二精品视频| 久久国产乱子精品免费女| 亚洲午夜精品17c| 亚洲伦理在线精品| 1000精品久久久久久久久| 精品国产不卡一区二区三区| 91麻豆精品国产91久久久久久久久| 色综合色综合色综合色综合色综合 | 一本在线高清不卡dvd| 一本色道久久综合狠狠躁的推荐 | 国产精品麻豆久久久| 国产精品夫妻自拍| 国产精品乱人伦一区二区| 综合网在线视频| 视频一区视频二区在线观看| 亚洲国产精品久久艾草纯爱| 日韩av电影免费观看高清完整版| 日韩制服丝袜先锋影音| 久久超级碰视频| 国产成人精品影视| 日本二三区不卡| 日韩欧美三级在线| 久久久九九九九| 亚洲日本护士毛茸茸| 三级欧美韩日大片在线看| 国产一区二区三区黄视频| 日本丶国产丶欧美色综合| 精品入口麻豆88视频| 综合自拍亚洲综合图不卡区| 老司机精品视频线观看86| 一本色道亚洲精品aⅴ| 日韩美女在线视频| 亚洲高清视频的网址| 大白屁股一区二区视频|