gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

深入了解Mysql中的鎖,聊聊使用場景!

本篇文章帶大家了解一下Mysql中的鎖,搞懂共享鎖、排他鎖、悲觀鎖、樂觀鎖,并聊聊使用場景,希望對(duì)大家有所幫助!

深入了解Mysql中的鎖,聊聊使用場景!

一、常見鎖類型

  • 表級(jí)鎖,鎖定整張表
  • 頁級(jí)鎖,鎖定一頁
  • 行級(jí)鎖,鎖定一行
  • 共享鎖,也叫S鎖,在MyISAM中也叫讀鎖
  • 排他鎖,也叫X鎖,在MyISAM中也叫寫鎖
  • 悲觀鎖,抽象性質(zhì),其實(shí)不真實(shí)存在
  • 樂觀鎖,抽象性質(zhì),其實(shí)不真實(shí)存在

深入了解Mysql中的鎖,聊聊使用場景!
常見鎖類型

二、Mysql引擎介紹

  • 其實(shí)mysql中的引擎有很多種類,其中InnoDB和MyISAM引擎最常用
  • 在mysql5.5版本前默認(rèn)使用MyISAM引擎,之后使用InnoDB引擎
  • 查看數(shù)據(jù)庫引擎命令如下
show variables like '%storage_engine%';

三、常用引擎間的區(qū)別

  • MyISAM 操作數(shù)據(jù)都是使用的表鎖,你更新一條記錄就要鎖整個(gè)表,導(dǎo)致性能較低,并發(fā)不高。當(dāng)然同時(shí)它也不會(huì)存在死鎖問題。

  • 而 InnoDB 與 MyISAM 的最大不同有兩點(diǎn):一是 InnoDB 支持事務(wù);二是 InnoDB 采用了行級(jí)鎖。

  • 在 Mysql 中,行級(jí)鎖并不是直接鎖記錄,而是鎖索引。索引分為主鍵索引和非主鍵索引兩種,如果一條sql 語句操作了主鍵索引,Mysql 就會(huì)鎖定這條主鍵索引;如果一條語句操作了非主鍵索引,MySQL會(huì)先鎖定該非主鍵索引,再鎖定相關(guān)的主鍵索引。

  • InnoDB 行鎖是通過給索引項(xiàng)加鎖實(shí)現(xiàn)的,如果沒有索引,InnoDB 會(huì)通過隱藏的聚簇索引來對(duì)記錄加鎖。也就是說:如果不通過索引條件檢索數(shù)據(jù),那么InnoDB將對(duì)表中所有數(shù)據(jù)加鎖,實(shí)際效果跟表鎖一樣。因?yàn)闆]有了索引,找到某一條記錄就得掃描全表,要掃描全表,就得鎖定表。

四、共享鎖與排他鎖

  • 數(shù)據(jù)庫的增刪改操作默認(rèn)都會(huì)加排他鎖,而查詢不會(huì)加任何鎖。

  • 共享鎖:對(duì)某一資源加共享鎖,自身可以讀該資源,其他人也可以讀該資源(也可以再繼續(xù)加共享鎖,即 共享鎖可多個(gè)共存),但無法修改。要想修改就必須等所有共享鎖都釋放完之后。

  • 排他鎖:對(duì)某一資源加排他鎖,自身可以進(jìn)行增刪改查,其他人無法進(jìn)行任何操作。

//共享鎖 select * from 表名 lock in share mode  //排他鎖 select * from 表名 for update

五、排他鎖的實(shí)際應(yīng)用

  • 這里我們以兩個(gè)操作數(shù)據(jù)庫的請(qǐng)求為例,假設(shè)這兩個(gè)請(qǐng)求分別為T1和T2
  • 假設(shè)T1為查詢請(qǐng)求,而T2為更新數(shù)據(jù)請(qǐng)求,在T1查詢很長時(shí)間的時(shí)候,還沒有返回結(jié)果,但是這時(shí)候T2過來請(qǐng)求更新了
  • 這個(gè)流程應(yīng)該是: T1運(yùn)行加共享鎖、T2運(yùn)行、發(fā)現(xiàn)T1未完成等待其完成、T1完成、T2開始執(zhí)行
  • T2之所以要等待,是因?yàn)門2執(zhí)行更新的時(shí)候需要給表加排他鎖,但是數(shù)據(jù)庫規(guī)定,不能在同一資源上同時(shí)共存這兩種鎖,所以T2必須等T1執(zhí)行完,釋放鎖后,才可以正常操作
T1: select * from 表名 lock in share mode //假設(shè)還未返回結(jié)果  T2: update 表名 set name='autofelix'

六、共享鎖的實(shí)際應(yīng)用

  • 如果T1和T2都是執(zhí)行的查詢,也就是都加共享鎖
  • 這時(shí)候就不用等待,可以立馬執(zhí)行
  • 因?yàn)橥毁Y源上可以同時(shí)存在多個(gè)共享鎖,也被稱為,共享鎖與共享鎖兼容
  • 意味著共享鎖不阻止其他人同時(shí)讀取資源,但是阻止其他人修改資源
T1: select * from table lock in share mode  T2: select * from table lock in share mode

七、死鎖的發(fā)生

  • 假設(shè)T1和T2都同時(shí)執(zhí)行2個(gè)資源操作,分別是查詢和更新數(shù)據(jù)
  • 假設(shè)T1和T2同時(shí)達(dá)到select,T1對(duì)表加共享鎖,而T2也加上了共享鎖
  • 當(dāng)T1的select執(zhí)行完畢,準(zhǔn)備執(zhí)行update時(shí)
  • 根據(jù)鎖機(jī)制,T1的共享鎖必須升級(jí)到排他鎖才可以執(zhí)行接下來的update操作
  • 在升級(jí)排他鎖之前,必須等T2的共享鎖釋放,同理,T2也在等T1的共享鎖釋放
  • 于是都在等待對(duì)方的鎖釋放,導(dǎo)致程序卡死,這種情況就是死鎖
T1: 開啟事務(wù),執(zhí)行查詢更新兩個(gè)操作       select * from table lock in share mode       update table set column1='hello'  T2: 開啟事務(wù),執(zhí)行查詢更新兩個(gè)操作       select * from table lock in share mode       update table set column1='world'

八、另一種發(fā)生死鎖的情景

  • 當(dāng)T1和T2都是只執(zhí)行更新語句的時(shí)候
  • 如下程序所示,這種語句非常的常見,很多人覺得他會(huì)產(chǎn)生死鎖,其實(shí)要看情況
  • 如果id是主鍵,由于主鍵機(jī)制,并不需要全表掃描,直接可以更新當(dāng)前數(shù)據(jù),所以不會(huì)產(chǎn)生死鎖
  • 如果id是普通字段,那么當(dāng)T1加上排他鎖之后,T2為了找到id=20條數(shù)據(jù),必須進(jìn)行全表掃描,當(dāng)他掃到第10條的時(shí)候,發(fā)現(xiàn)這里有排他鎖,導(dǎo)致全表掃描進(jìn)行不下去,就會(huì)導(dǎo)致等待
T1: begin      update table set content='hello' where id=10  T2: begin      update table set content='world' where id=20

九、死鎖的解決方式

  • 就是讓T1和T2順序執(zhí)行,比如T1在執(zhí)行完select后,立馬給自身加上排他鎖,這樣T2不得不等待T1執(zhí)行完才能繼續(xù)
  • 但是如果有很多請(qǐng)求過來的話,都必須等待,這對(duì)用戶特別的不友好
  • 所以,某些數(shù)據(jù)庫引入了另一種方式,叫做更新鎖,這里mysql除外,不存在更新鎖
  • 更新鎖其實(shí)就是排他鎖的另一種實(shí)現(xiàn),只是他允許其他人讀的同時(shí)加共享鎖,但是不允許其他操作,除非釋放了更新鎖
  • 流程大概如此: T1執(zhí)行完select加上更新鎖,T2執(zhí)行查詢完,準(zhǔn)備加更新鎖,發(fā)現(xiàn)已經(jīng)有了,就等待,其他請(qǐng)求過來,如果查詢是不受影響的,但是更新才等待
  • 這相比上面的查詢也要等待增加了效率
T1: begin       select * from table for update       update table set content='hello'  T2: begin       select * from table for update       update table set content='world'
T1: begin       select * from table [加更新鎖操作]       update table set content='hello'  T2: begin       select * from table [加更新鎖操作]       update table set content='world'

十、意向鎖和計(jì)劃鎖

  • 計(jì)劃鎖與程序猿無關(guān),不需要了解
  • 意向鎖,Innodb特有,分為意向共享鎖和意向排他鎖
  • 意向共享鎖: 表示事務(wù)獲取共享鎖時(shí),必須先得獲取該表的意向共享鎖
  • 意向排他鎖: 表示事務(wù)獲取排他鎖時(shí),必須先得獲取該表的意向排他鎖
  • 我們知道要對(duì)整個(gè)表加鎖,必須保證表內(nèi)不存在任何鎖
  • 如果一行行的去檢查是否加鎖,效率必然極低,這時(shí)候可以檢測(cè)意向鎖是否被占用即可

十一、樂觀鎖和悲觀鎖

  • 樂觀鎖和悲觀鎖都是針對(duì)select而言的
  • 比如在商品搶購中,用戶購買后庫存需要減1,而很多用戶同時(shí)購買時(shí),讀出來的庫存數(shù)量一樣,然后多個(gè)用戶同時(shí)用該庫存去減1
  • 這種做法必然會(huì)出現(xiàn)很大的漏洞,如果向在淘寶,京東出現(xiàn)這種情況,你就可以打包回家種地了
  • 這種情況如何解決呢,其實(shí)可以使用悲觀鎖進(jìn)行解決,說白了也就是排他鎖
  • 用戶進(jìn)來查庫存的時(shí)候,就加上排他鎖,等他所有操作完成后,再釋放排他鎖,讓其他人進(jìn)來
  • 不讓用戶等待,就可以使用樂觀鎖方式解決,樂觀鎖一般靠表的設(shè)計(jì)和時(shí)間戳來實(shí)現(xiàn)
  • 一般是在表中添加version或者timestamp時(shí)間戳字段
  • 這樣就會(huì)保證如果更新失敗,就表示有其他程序更新了數(shù)據(jù)庫,就可以通過重試解決
update table set num=num-1 where id=10 and version=12

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
中文精品无码中文字幕无码专区| 久久99中文字幕| 日本十八禁视频无遮挡| 捷克做爰xxxⅹ性视频| 国产三级日本三级在线播放| 日日橹狠狠爱欧美超碰| 麻豆传媒网站在线观看| 国产精品h视频| 91精品国产三级| 亚洲成人动漫在线| 加勒比海盗1在线观看免费国语版| 9l视频白拍9色9l视频| 视色视频在线观看| 三区视频在线观看| 亚洲精品中文字幕乱码无线| 两性午夜免费视频| 蜜桃视频一区二区在线观看| 91亚洲精品国产| 久久久性生活视频| 国产福利视频在线播放| 波多野结衣天堂| 超碰在线免费av| 最近免费观看高清韩国日本大全| av在线免费观看国产| av免费观看网| 亚洲欧美久久久久| 艳母动漫在线观看| 久在线观看视频| 中文字幕永久有效| 欧美一二三不卡| 无码无遮挡又大又爽又黄的视频| 视色视频在线观看| 精品人妻大屁股白浆无码| 欧美成人xxxxx| 亚洲综合20p| 国产黄色一级网站| 最新av免费在线观看| 人人妻人人澡人人爽欧美一区| 欧美二区在线视频| www.亚洲自拍| 六月丁香激情网| 欧美视频亚洲图片| 男人用嘴添女人下身免费视频| 182午夜在线观看| 国产精品入口芒果| 在线观看免费黄色片| 欧美 国产 日本| 亚洲五码在线观看视频| 777视频在线| 国产原创中文在线观看| 992kp免费看片| 一区二区三区网址| 日韩在线一级片| 男人添女荫道口女人有什么感觉| 性猛交ⅹ×××乱大交| 男人靠女人免费视频网站| 桥本有菜av在线| theporn国产精品| aaaaaa亚洲| 浮妇高潮喷白浆视频| 大西瓜av在线| 日韩在线观看a| 免费国产成人看片在线| 91欧美一区二区三区| av免费一区二区| 午夜免费福利视频在线观看| 可以免费在线看黄的网站| 日本www在线播放| 香港三级韩国三级日本三级| 青青青在线观看视频| av 日韩 人妻 黑人 综合 无码| 深夜做爰性大片蜜桃| 日韩a一级欧美一级| 91香蕉视频在线观看视频| 日韩在线一区视频| 91社在线播放| 毛毛毛毛毛毛毛片123| 男人的天堂成人| 久久手机在线视频| 成 年 人 黄 色 大 片大 全| 久久国产精品网| 欧美女人性生活视频| 女人扒开屁股爽桶30分钟| 天天摸天天碰天天添| 久久精品免费网站| 中文字幕综合在线观看| 国产 欧美 日韩 一区| 岛国大片在线播放| 黄色一级大片在线观看| 国产精品v日韩精品v在线观看| 久久久久xxxx| 妞干网在线播放| av网址在线观看免费| 亚洲男人天堂av在线| 久久男人资源站| 男人插女人下面免费视频| 国产精品无码av在线播放| 久久久久免费精品| www.国产亚洲| 亚洲熟女乱色一区二区三区| 潘金莲激情呻吟欲求不满视频| a级网站在线观看| 国产精品欧美激情在线观看| 怡红院亚洲色图| 国产精品专区在线| 欧美成人乱码一二三四区免费| 中国丰满熟妇xxxx性| 亚洲老女人av| 国内少妇毛片视频| 国产九九热视频| 成品人视频ww入口| 日韩成人精品视频在线观看| 精品成在人线av无码免费看| mm1313亚洲国产精品无码试看| 精品少妇人妻av一区二区| 国产免费视频传媒| www成人免费| 日本黄色a视频| 亚洲综合在线网站| 久久久久久久久久久99| 熟女熟妇伦久久影院毛片一区二区| 91猫先生在线| 丰满的少妇愉情hd高清果冻传媒 | 国产美女主播在线| 国产精欧美一区二区三区白种人| 成年人视频在线免费| 国产夫妻自拍一区| 粉嫩av一区二区三区天美传媒| 在线观看免费视频高清游戏推荐| 免费看的黄色大片| 精品少妇人欧美激情在线观看| 99999精品| 99亚洲精品视频| 亚洲综合伊人久久| 一级片免费在线观看视频| www.久久久精品| 欧美日韩亚洲自拍| 国产喷水theporn| 久热在线视频观看| 图片区乱熟图片区亚洲| 日本高清久久久| 中文字幕在线综合| 樱花草www在线| 美女黄色片网站| www亚洲国产| www国产无套内射com| 青青草视频在线视频| 青青草视频在线视频| 欧美在线一区视频| 国产又黄又猛的视频| 午夜影院免费版| 国产夫妻自拍一区| 红桃av在线播放| 欧美视频免费播放| 亚洲一区二区蜜桃| 思思久久精品视频| 成人在线免费观看网址| 欧美一区二区激情| 欧美成人xxxxx| 国产精品自拍视频在线| 中文字幕一区二区三区四| 97在线免费视频观看| 北条麻妃在线视频观看| 污视频网址在线观看| 91.com在线| 蜜臀视频一区二区三区| 欧洲美女和动交zoz0z| 日韩国产欧美亚洲| 亚洲男人天堂2021| av黄色在线网站| 超碰中文字幕在线观看| 国产二级片在线观看| 午夜一区二区视频| 你真棒插曲来救救我在线观看| 簧片在线免费看| 久久亚洲中文字幕无码| 四虎成人在线播放| 看欧美ab黄色大片视频免费| 法国空姐在线观看免费| 一区二区三区入口| 丁香六月激情婷婷| 免费观看中文字幕| 99久久国产宗和精品1上映| 激情成人开心网| jizzzz日本| 亚洲国产精品久久久久爰色欲| 蜜桃视频一区二区在线观看| 88av.com| 国产精品涩涩涩视频网站| 裸体大乳女做爰69| 999久久久精品视频| 欧美一级黄色影院| 国产精品97在线| 欧美国产日韩激情| 九九久久九九久久| 在线观看视频黄色| 天天干天天玩天天操| 成年人在线观看视频免费| 日本一区二区黄色| 波多野结衣家庭教师视频|