MySQL鎖

鎖目錄.PNG

一. 鎖概述

InnoDB默認(rèn)支持行級鎖匀钧,但也支持表級鎖
MyISAM,Memory支持表級鎖

三種鎖特性

1. 表級鎖

用于查詢?yōu)橹髅担倭堪此饕龡l件更新

開銷小之斯,加鎖快
不會出現(xiàn)死鎖
鎖粒度大,鎖沖突概率高朱浴,并發(fā)度低

2. 行級鎖

適用于大量按索引條件更新數(shù)據(jù)吊圾,如OLTP

開銷大,加鎖慢
會出現(xiàn)死鎖
鎖粒度小翰蠢,鎖沖突概率低,并發(fā)度高

3. 頁面鎖

加鎖時間介于前二者之間
會出現(xiàn)死鎖
并發(fā)度一般

二. MyISAM表鎖

1. 表鎖兼容性

讀寫互斥

2. 如何加表鎖

MyISAM在select前自動加讀鎖啰劲,更新前自動加寫鎖
MyISAM總是一次性獲得SQL語句的所有鎖---故無死鎖

3. MyISAM鎖調(diào)度

讀寫互斥梁沧,且寫請求比讀請求重要
故不適用大量更新和查詢應(yīng)用(查詢操作被永遠(yuǎn)阻塞)

避免長時間查詢操作,導(dǎo)致餓死寫請求--不要想一條SELECT搞定所有

三. 事務(wù)論

支持事務(wù)蝇裤;采用行級鎖

1. 事務(wù)的ACID特性

Atomicity 原子性

數(shù)據(jù)修改廷支,要么全執(zhí)行,要么全不執(zhí)行

Consistent 一致性

事務(wù)開始和完成時栓辜,數(shù)據(jù)一致

Isolation 隔離性

事務(wù)不受外部并發(fā)操作影響恋拍,獨(dú)立執(zhí)行

Durable 持久性

事務(wù)完成后,數(shù)據(jù)修改是永久性的藕甩,系統(tǒng)故障也能保持

2. 并發(fā)事務(wù)問題(鎖問題)

1) 更新丟失

最后的更新覆蓋了其他事務(wù)所做的更新
必須完全避免

2)臟讀

一個事務(wù)修改了記錄施敢,但未提交,同時另一個事務(wù)對該記錄進(jìn)行讀取

3)不可重復(fù)讀

事務(wù)再次讀取之前讀過的數(shù)據(jù)狭莱,該數(shù)據(jù)已改變或該記錄已被刪除

4)幻讀

一個事務(wù)相同條件查詢僵娃,發(fā)現(xiàn)其他事務(wù)插入了滿足條件的新數(shù)據(jù)

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

臟讀、不可重復(fù)讀腋妙、幻讀----數(shù)據(jù)庫讀一致性問題默怨,事務(wù)隔離機(jī)制來解決

1) 事務(wù)隔離方式

  1. 讀取數(shù)據(jù)前加鎖
  2. MVCC(multiversion concurrency control ) --多版本并發(fā)控制(或多版本數(shù)據(jù)庫)
    生成數(shù)據(jù)請求時間點(diǎn) 一致性數(shù)據(jù)快照(同一數(shù)據(jù),多個版本)

MVCC實(shí)現(xiàn)InnoDB一致性非鎖定讀

若讀取的行正在delete,update操作骤素,不等待行上鎖釋放匙睹,轉(zhuǎn)去讀取行的一個數(shù)據(jù)快照愚屁。如下圖

2) 事務(wù)隔離級別

用以解決隔離與并發(fā)的矛盾,分為四種:

未提交讀(導(dǎo)致臟讀痕檬,很少用)
已提交讀(大多數(shù)數(shù)據(jù)庫默認(rèn)級別
可重復(fù)讀(mysql默認(rèn)霎槐,無法解決幻讀)

可序列化(每行加鎖,導(dǎo)致大量超時和鎖爭用谆棺,很少使用)

事務(wù)隔離級別

四. InnoDB鎖

1. InnoDB行鎖模式及加鎖方法

兩種行鎖:

1) 共享鎖(S)

  • 允許一個事務(wù)讀一行栽燕,阻止其他事務(wù)獲得相同數(shù)據(jù)的 排他鎖
  • 加鎖語句:
    select * from table where... LOCK IN SHARE MODE

2) 排他鎖(X)

  • 持X的事務(wù)可更新數(shù)據(jù),阻止其他事務(wù)(取得相同數(shù)據(jù)集)的 共享讀鎖排他寫鎖
  • 加鎖語句:
    select * from table where...FOR UPDATE

兩種意向鎖(表鎖):

InnoDB自動加
對更新語句改淑,自動加X鎖
普通SELECT語句碍岔,不加鎖

1) 意向共享鎖(IS)

事務(wù)想獲得表中某幾行的共享鎖
事務(wù)在對數(shù)據(jù)行加S鎖前,必須先取得表IS鎖

2)意向排他鎖(IX)

事務(wù)想獲得表中某幾行的排他鎖


2. InnoDB行鎖實(shí)現(xiàn)方式

  • InnoDB行鎖通過對索引項(xiàng)加鎖實(shí)現(xiàn)
  • 無索引朵夏,則通過聚簇索引加鎖
  • 不通過索引條件檢索蔼啦,InnoDB會鎖定所有記錄,導(dǎo)致大量鎖沖突仰猖,效果等同于表鎖

三種InnoDB鎖算法

1) record lock

索引項(xiàng)加鎖

2) gap lock

對第一條記錄前捏肢,索引項(xiàng)之間,最后一條記錄之后 的 間隙 加鎖

3) next-key lock

前二者組合饥侵,對記錄和前面的間隙加鎖
用于范圍條件查詢

3. Next-Key鎖

Gap

鍵值在條件范圍內(nèi)鸵赫,但不存在的記錄

目的

防止幻讀
恢復(fù)和復(fù)制機(jī)制需要

會阻塞條件范圍內(nèi)鍵值插入,導(dǎo)致嚴(yán)重鎖等待躏升,故盡量用相等條件

例:

id={1,2,3....101}
select * from table where id>100 for update

對101辩棒,>101(間隙)加鎖

五. 如何避免死鎖

@其他補(bǔ)充

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市膨疏,隨后出現(xiàn)的幾起案子一睁,更是在濱河造成了極大的恐慌,老刑警劉巖佃却,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件者吁,死亡現(xiàn)場離奇詭異,居然都是意外死亡饲帅,警方通過查閱死者的電腦和手機(jī)复凳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洒闸,“玉大人染坯,你說我怎么就攤上這事∏鹨荩” “怎么了单鹿?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長深纲。 經(jīng)常有香客問我仲锄,道長劲妙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任儒喊,我火速辦了婚禮镣奋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怀愧。我一直安慰自己侨颈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布芯义。 她就那樣靜靜地躺著哈垢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扛拨。 梳的紋絲不亂的頭發(fā)上耘分,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天,我揣著相機(jī)與錄音绑警,去河邊找鬼求泰。 笑死,一個胖子當(dāng)著我的面吹牛计盒,可吹牛的內(nèi)容都是我干的渴频。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼北启,長吁一口氣:“原來是場噩夢啊……” “哼枉氮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起暖庄,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎楼肪,沒想到半個月后培廓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡春叫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年肩钠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暂殖。...
    茶點(diǎn)故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡价匠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出呛每,到底是詐尸還是另有隱情踩窖,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布晨横,位于F島的核電站洋腮,受9級特大地震影響箫柳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜啥供,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一悯恍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伙狐,春花似錦涮毫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至豫尽,卻和暖如春篙梢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背美旧。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工渤滞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人榴嗅。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓妄呕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嗽测。 傳聞我的和親對象是個殘疾皇子绪励,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 當(dāng)一個系統(tǒng)訪問量上來的時候,不只是數(shù)據(jù)庫性能瓶頸問題了唠粥,數(shù)據(jù)庫數(shù)據(jù)安全也會浮現(xiàn)疏魏,這時候合理使用數(shù)據(jù)庫鎖機(jī)制就顯得異...
    初來的雨天閱讀 3,579評論 0 22
  • MySQL的事務(wù)支持 MySQL的事務(wù)支持不是綁定在MySQL服務(wù)器本身,而是與存儲引擎相關(guān): MyISAM:不支...
    但莫閱讀 493評論 0 6
  • MyISAM 和 MEMORY 存儲引擎采用的是表級鎖晤愧;InnoDB 存儲引擎即支持行級鎖大莫,也支持表級鎖,但默認(rèn)情...
    微日月閱讀 897評論 0 0
  • 行鎖官份、表鎖對比 開銷只厘、加鎖速度、死鎖舅巷、粒度羔味、并發(fā)性能 表鎖:開銷小,加鎖快钠右;不會出現(xiàn)死鎖赋元;鎖定力度大,發(fā)生鎖沖突概...
    高廣超閱讀 6,192評論 0 25
  • 當(dāng)一個系統(tǒng)訪問量上來的時候坪仇,不只是數(shù)據(jù)庫性能瓶頸問題了杂腰,數(shù)據(jù)庫數(shù)據(jù)安全也會浮現(xiàn),這時候合理使用數(shù)據(jù)庫鎖機(jī)制就顯得異...
    JackFrost_fuzhu閱讀 7,749評論 4 83