MySQL數(shù)據(jù)庫(kù)意向鎖超級(jí)入門(mén)篇
在 MySQL(主要是 InnoDB 存儲(chǔ)引擎) 中,意向鎖(Intention Lock) 是一種 表級(jí)鎖,用來(lái)表示事務(wù)打算在表中的某些行上加什么類型的行鎖,從而提高鎖沖突判斷的效率。
一、為什么需要意向鎖?
InnoDB 同時(shí)支持:
- 表鎖
- 行鎖
如果沒(méi)有意向鎖,當(dāng)一個(gè)事務(wù)想給整張表加鎖時(shí),就必須 逐行檢查是否有行鎖存在,這在大表中會(huì)非常低效。
?? 意向鎖的作用:
讓數(shù)據(jù)庫(kù) 只需檢查表級(jí)的意向鎖,就能快速判斷是否可以加表鎖,而不必掃描整張表的行鎖。
二、意向鎖的類型
InnoDB 有 兩種意向鎖:
| 意向鎖類型 | 含義 |
|---|---|
| IS(Intention Shared Lock) | 表示事務(wù)打算在表中某些行上加 共享鎖(S) |
| IX(Intention Exclusive Lock) | 表示事務(wù)打算在表中某些行上加 排他鎖(X) |
三、意向鎖的工作機(jī)制
1?? 加行鎖前,先加意向鎖(表級(jí))
加行級(jí)共享鎖(S)前
→ 先在表上加 IS 鎖
加行級(jí)排他鎖(X)前
→ 先在表上加 IX 鎖
?? 意向鎖 不是用戶顯式加的,而是 InnoDB 自動(dòng)維護(hù)的
2?? 鎖兼容關(guān)系(重點(diǎn))
| IS | IX | S | X | |
|---|---|---|---|---|
| IS | ? | ? | ? | ? |
| IX | ? | ? | ? | ? |
| S | ? | ? | ? | ? |
| X | ? | ? | ? | ? |
?? 關(guān)鍵理解:
- 多個(gè)事務(wù)可以同時(shí)持有 IS / IX
- 表級(jí) S / X 鎖會(huì)與意向鎖發(fā)生沖突
- 意向鎖之間幾乎不沖突
四、舉例說(shuō)明(非常重要)
示例 1:行鎖 + 意向鎖
START TRANSACTION; SELECT * FROM user WHERE id = 1 FOR UPDATE;
發(fā)生的事情:
- 在
user表上加 IX(意向排他鎖) - 在
id = 1這行上加 X(排他鎖)
示例 2:表鎖檢測(cè)沖突
LOCK TABLE user WRITE;
MySQL 只需檢查:
user表上是否存在 IS / IX
如果存在 IX,說(shuō)明有事務(wù)在改某些行
?? WRITE 表鎖不能加,直接阻塞或失敗
五、意向鎖的特點(diǎn)總結(jié)
? 意向鎖是 表級(jí)鎖
? 由 InnoDB 自動(dòng)加鎖與釋放
? 不會(huì)阻塞 行鎖之間的并發(fā)
? 用于 快速判斷表鎖與行鎖是否沖突
? 是 多粒度鎖(Multi-Granularity Locking) 的核心機(jī)制
六、一句話總結(jié)
意向鎖是 InnoDB 的一種表級(jí)鎖,用來(lái)表明事務(wù)將要在表的某些行上加行鎖,從而避免在加表鎖時(shí)逐行檢查行鎖,提高鎖沖突檢測(cè)的效率。
推薦閱讀《MySQL 數(shù)據(jù)庫(kù) 意向鎖 詳解(白話篇:一看就懂)》
到此這篇關(guān)于MySQL數(shù)據(jù)庫(kù) 意向鎖超級(jí)入門(mén)篇的文章就介紹到這了,更多相關(guān)mysql意向鎖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
asp+mysql+utf8 網(wǎng)頁(yè)出現(xiàn)亂碼問(wèn)題的解決方法
無(wú)論在網(wǎng)頁(yè)中加多少UTF8的定義,顯示的結(jié)果都還是會(huì)有一些小格子,反而定義為gb2312,顯示完全正常2014-03-03
MySQL 日志相關(guān)知識(shí)總結(jié)
這篇文章主要介紹了MySQL 日志相關(guān)知識(shí)總結(jié),幫助大家更好的理解和實(shí)用MySQL,感興趣的朋友可以了解下2021-02-02
MySQL 格式化時(shí)間的實(shí)現(xiàn)示例
MySQL提供了多種日期和時(shí)間類型,在處理時(shí)間時(shí)需要根據(jù)不同類型選擇不同的格式化方法,常用的日期類型有DATE、YEAR、TIME;常用的日期時(shí)間類型有DATETIME和TIMESTAMP,本文就來(lái)介紹一下MySQL 格式化時(shí)間,感興趣的可以了解一下2023-10-10
Mysql刪除重復(fù)數(shù)據(jù)并且只保留一條(附實(shí)例!)
最近有朋友打電話尋求一個(gè)SQL相關(guān)的問(wèn)題,大致是表中存在重復(fù)數(shù)據(jù),需要?jiǎng)h除掉重復(fù)數(shù)據(jù)保留一條的場(chǎng)景,下面這篇文章主要給大家介紹了關(guān)于Mysql刪除重復(fù)數(shù)據(jù)并且只保留一條的相關(guān)資料,需要的朋友可以參考下2023-02-02
MySQL查詢樹(shù)形結(jié)構(gòu)數(shù)據(jù)的兩種方法
本文主要介紹了MySQL查詢樹(shù)形結(jié)構(gòu)數(shù)據(jù)的兩種方法,可以使用遞歸查詢或者閉包表來(lái)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
幾種MySQL中的聯(lián)接查詢操作方法總結(jié)
這篇文章主要介紹了幾種MySQL中的聯(lián)接查詢操作方法總結(jié),文中包括一些代碼舉例講解,需要的朋友可以參考下2015-04-04
MySQL不適合創(chuàng)建索引的11種情況示例分析
這篇文章介紹了在MySQL中不適合創(chuàng)建索引的11種情況,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-02-02

