最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL 鎖的完整分類與詳解

 更新時(shí)間:2026年02月28日 10:54:22   作者:是碼龍不是碼農(nóng)  
MySQL中的鎖可以從鎖粒度、鎖類型、鎖狀態(tài)三個(gè)維度劃分,下面按 “粒度 + 類型” 的邏輯體系,逐一說(shuō)明所有核心鎖的定義、作用和使用場(chǎng)景,對(duì)mysql鎖分類相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧

MySQL 中的鎖可以從鎖粒度鎖類型、鎖狀態(tài)三個(gè)維度劃分,下面按 “粒度 + 類型” 的邏輯體系,逐一說(shuō)明所有核心鎖的定義、作用和使用場(chǎng)景:

一、按鎖粒度劃分(核心分類)

鎖粒度決定了鎖的影響范圍,粒度越小,并發(fā)度越高,但鎖管理開(kāi)銷越大。

1. 全局鎖

  • 定義:鎖定整個(gè) MySQL 實(shí)例,是粒度最大的鎖。
  • 作用:保證整個(gè)實(shí)例的數(shù)據(jù)一致性,防止數(shù)據(jù)被修改。
  • 具體實(shí)現(xiàn)FLUSH TABLES WITH READ LOCK (FTWRL)
  • 使用場(chǎng)景
    • 全庫(kù)邏輯備份(避免備份過(guò)程中數(shù)據(jù)被修改);
    • 跨庫(kù)事務(wù)一致性讀?。O少用,因?yàn)闀?huì)阻塞所有寫(xiě)操作)。
  • 注意:加全局鎖后,所有庫(kù)的所有表都只能讀,寫(xiě)操作(增刪改、DDL)全部阻塞;解鎖用UNLOCK TABLES。

2. 表級(jí)鎖

鎖定整張表,粒度比全局鎖小,開(kāi)銷小、加鎖快,但并發(fā)度低。MySQL 中表級(jí)鎖分為兩類:

表格

鎖類型定義作用適用場(chǎng)景
表讀鎖(READ)共享鎖(S 鎖)加鎖后,自己和其他會(huì)話都能讀表,所有會(huì)話都不能寫(xiě)表只讀操作(如批量查詢)
表寫(xiě)鎖(WRITE)排他鎖(X 鎖)加鎖后,只有自己能讀寫(xiě)表,其他會(huì)話既不能讀也不能寫(xiě)批量修改表數(shù)據(jù)(如全表更新)
元數(shù)據(jù)鎖(MDL)隱式加鎖(無(wú)需手動(dòng))保護(hù)表結(jié)構(gòu)(元數(shù)據(jù))不被修改,DDL 操作會(huì)加 MDL 寫(xiě)鎖,DML / 查詢加 MDL 讀鎖防止查詢時(shí)表結(jié)構(gòu)被修改
意向鎖(IS/IX)表級(jí)的 “標(biāo)記鎖”表示 “某個(gè)事務(wù)準(zhǔn)備給表中的行加鎖”,避免行鎖和表鎖沖突配合行鎖使用(自動(dòng)加鎖)

1.意向共享鎖(IS):與表鎖共享鎖(read)兼容,與表鎖排他鎖(write)互斥。

2.意向排他鎖(IX):與表鎖共享鎖(read)及排他鎖(write)都互斥。意向鎖之間不會(huì)互斥。

手動(dòng)加表鎖命令

LOCK TABLES table_name READ;  -- 加讀鎖
LOCK TABLES table_name WRITE; -- 加寫(xiě)鎖
UNLOCK TABLES;                -- 解鎖

3. 行級(jí)鎖

鎖定表中的單行數(shù)據(jù),粒度最小,并發(fā)度最高,但加鎖開(kāi)銷大(InnoDB 引擎特有,MyISAM 不支持)。

鎖類型定義作用
行共享鎖(S 鎖)事務(wù)對(duì)行加 S 鎖后,其他事務(wù)可加 S 鎖(共享讀),但不能加 X 鎖(排他寫(xiě))允許并發(fā)讀,防止讀時(shí)被修改(如SELECT ... LOCK IN SHARE MODE
行排他鎖(X 鎖)事務(wù)對(duì)行加 X 鎖后,其他事務(wù)既不能加 S 鎖也不能加 X 鎖保證修改 / 刪除時(shí)數(shù)據(jù)獨(dú)占,防止并發(fā)修改(如UPDATE/DELETE/INSERT
間隙鎖(Gap Lock)鎖定索引記錄之間的 “間隙”(不包含記錄本身),防止插入新數(shù)據(jù)解決幻讀問(wèn)題(RR 隔離級(jí)別下自動(dòng)生效)
臨鍵鎖(Next-Key Lock)行鎖 + 間隙鎖的組合,鎖定 “記錄 + 記錄前的間隙”,是 InnoDB 默認(rèn)的行鎖方式同時(shí)防止幻讀、不可重復(fù)讀(RR 隔離級(jí)別下核心鎖)
插入意向鎖(Insert Intention Lock)多個(gè)事務(wù)插入同一間隙時(shí)的 “意向鎖”,互不阻塞提升并發(fā)插入效率(如多個(gè)事務(wù)插入不同行到同一間隙)
自增鎖(AUTO-INC Lock)針對(duì)自增列的表級(jí)鎖,保證自增 ID 連續(xù)唯一防止自增 ID 重復(fù)(可通過(guò)innodb_autoinc_lock_mode調(diào)整鎖粒度)

行鎖示例

-- 加行共享鎖(S鎖)
SELECT * FROM user WHERE id=1 LOCK IN SHARE MODE;
-- 加行排他鎖(X鎖)
SELECT * FROM user WHERE id=1 FOR UPDATE;
-- 普通DML自動(dòng)加X(jué)鎖
UPDATE user SET name='test' WHERE id=1;

二、按鎖屬性補(bǔ)充分類

除了粒度,還可按 “鎖的競(jìng)爭(zhēng)關(guān)系” 劃分:

  1. 共享鎖(S 鎖):多事務(wù)共享讀權(quán)限,互斥寫(xiě)權(quán)限(如行 S 鎖、表讀鎖);
  2. 排他鎖(X 鎖):獨(dú)占讀寫(xiě)權(quán)限,其他事務(wù)無(wú)法加任何鎖(如行 X 鎖、表寫(xiě)鎖);
  3. 意向鎖(IS/IX):表級(jí)的 “預(yù)告鎖”,IS = 意向共享(準(zhǔn)備加行 S 鎖),IX = 意向排他(準(zhǔn)備加行 X 鎖),僅用于判斷表鎖和行鎖的沖突,無(wú)需手動(dòng)操作。

三、特殊場(chǎng)景的鎖

  1. 頁(yè)鎖:鎖定數(shù)據(jù)頁(yè)(InnoDB 的存儲(chǔ)結(jié)構(gòu),一頁(yè)約 16KB),粒度介于行鎖和表鎖之間,MySQL 極少單獨(dú)使用,僅 InnoDB 內(nèi)部?jī)?yōu)化時(shí)用到;
  2. 死鎖:并非 “鎖類型”,而是多事務(wù)互相持有對(duì)方需要的鎖導(dǎo)致的阻塞狀態(tài),MySQL 會(huì)自動(dòng)檢測(cè)并回滾其中一個(gè)事務(wù)解決。

總結(jié)

  1. 核心鎖粒度:全局鎖(整實(shí)例)> 表級(jí)鎖(整表)> 行級(jí)鎖(單行),粒度越小并發(fā)越高、開(kāi)銷越大;
  2. 核心鎖類型:共享鎖(S)和排他鎖(X)是基礎(chǔ),間隙鎖 / 臨鍵鎖是 InnoDB 解決幻讀的核心,MDL 鎖保護(hù)表結(jié)構(gòu);
  3. 引擎差異:MyISAM 僅支持表級(jí)鎖,InnoDB 支持行級(jí)鎖 + 表級(jí)鎖,行鎖是 InnoDB 保證事務(wù) ACID 的核心。

關(guān)鍵點(diǎn):日常開(kāi)發(fā)中,90% 的場(chǎng)景關(guān)注行級(jí)鎖(X/S/ 臨鍵鎖)MDL 鎖 即可,全局鎖僅用于備份,表級(jí)鎖盡量避免(會(huì)降低并發(fā))。

到此這篇關(guān)于MySQL 鎖的完整分類與詳解的文章就介紹到這了,更多相關(guān)mysql鎖分類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

牙克石市| 井陉县| 龙口市| 怀远县| 新和县| 友谊县| 阳朔县| 乃东县| 德保县| 江华| 周至县| 乐业县| 澄江县| 应城市| 榆社县| 青冈县| 本溪市| 阳江市| 昆明市| 邵东县| 息烽县| 大连市| 青龙| 莆田市| 体育| 桐柏县| 安阳县| 南昌市| 舞钢市| 鹰潭市| 兴化市| 灵璧县| 广宗县| 江华| 宁都县| 明水县| 南涧| 海口市| 土默特右旗| 根河市| 阳谷县|