MySQL鎖的分類 MVCC和S/X鎖的互補關系

各位看官,大家早安午安晚安呀~~~

如果您覺得這篇文章對您有幫助的話

歡迎您一鍵三連,小編盡全力做到更好
歡迎您分享給更多人哦

今天我們來學習:MySQL鎖的分類 && MVCC和S/X鎖的互補關系

1.鎖分類

1.按鎖粒度分類:全局鎖,表級鎖,行級鎖

2.按照鎖模式分類:.共享鎖(Shared Lock,S 鎖),排他鎖(Exclusive Lock,X 鎖)

3.特殊鎖類型: 意向鎖(表鎖,Intention lock),?間隙鎖(Gap Lock),臨鍵鎖(Next-Key Lock)

2.按鎖粒度分類

2.1.?全局鎖(Global Lock)

  • 特點:對整個數據庫實例加鎖,阻塞所有 DML 和 DDL 操作。
  • 命令FLUSH TABLES WITH READ LOCK;
  • 優點
    • 實現簡單,確保數據一致性(如全量備份)。

2.2.?表級鎖(Table Lock)

  • 特點:對整張表加鎖,開銷小、加鎖快。
  • 命令LOCK TABLES table_name READ/WRITE;
  • 優點
    • 開銷小,適合批量操作(如批量插入)

2.3.行級鎖

?行級鎖(Row Lock)
    • 特點:對索引記錄加鎖,僅 InnoDB 存儲引擎支持。
    • 優點
      • 鎖粒度最小,并發性能最高(不同事務可同時操作不同行)。

3.按照鎖模式分類

1. 共享鎖(Shared Lock,S 鎖)
  • 核心規則
    事務對資源加 S 鎖后,允許其他事務加 S 鎖(共享讀),但禁止其他事務加 X 鎖(禁止寫)
    即:“可以同時讀,不能同時寫”

  • 適用場景
    僅讀取數據,不修改時使用(如SELECT ... LOCK IN SHARE MODE;)。

2.排他鎖(Exclusive Lock,X 鎖)

  • 核心規則
    事務對資源加 X 鎖后,禁止其他事務加任何鎖(既不能讀,也不能寫)
    即:“寫的時候,既不能同時讀,也不能同時寫”

  • 適用場景
    修改數據時使用(如UPDATE/DELETE,數據庫會自動加 X 鎖;或顯式加鎖SELECT ... FOR UPDATE;)。

意向鎖是表級鎖,它的設計是為了協調行級鎖和表級鎖的關系,避免 “行鎖與表鎖” 之間的沖突檢測效率低下。

4.問題:

4.1. 為什么需要意向鎖?

它的核心作用:是通過表級標記?優化 行級鎖和表級鎖之間的沖突檢查,減少鎖檢查的開銷

假設沒有意向鎖,當事務 A 對表中某行加 S 鎖,此時事務 B 想對整個表加 X 鎖(如ALTER TABLE),數據庫需要:

  1. 檢查表中所有行是否有 S 鎖 / X 鎖(逐行掃描)。
  2. 若表中數據量極大(如 1000 萬行),逐行檢查會導致性能災難。

意向鎖的作用:提前聲明 “事務想對表中的行加 S 鎖或 X 鎖”,讓表級鎖的沖突檢測只需檢查意向鎖,無需掃描全行。

2. 意向鎖的類型

意向鎖是表級鎖,分為兩種:

  • 意向共享鎖(IS 鎖):事務聲明 “未來可能對表中某些行加 S 鎖”。
  • 意向排他鎖(IX 鎖):事務聲明 “未來可能對表中某些行加 X 鎖”。
3. 意向鎖的工作流程

事務對行加 S 鎖 / X 鎖前,必須先對表加對應的意向鎖:

  1. 事務想對某行加 S 鎖 → 先對表加 IS 鎖 → 再對行加 S 鎖。
  2. 事務想對某行加 X 鎖 → 先對表加 IX 鎖 → 再對行加 X 鎖。

這樣的話 =》 如果加表鎖的話,一看到有意向鎖就 阻塞等待

總之:意向鎖既是一種標記(標記事務的意圖,它不直接鎖定任何行數據,而是在表級別記錄事務的操作方向(讀還是寫)),也是真正的鎖(有鎖的阻塞和兼容規則)

它的核心作用:是通過表級標記優化行級鎖和表級鎖之間的沖突檢查,減少鎖檢查的開銷

4.2總結:MVCC 與鎖的互補關系

為啥有mvcc還需要互斥鎖 和 排他鎖??

1.肯定是mvcc有局限性呀

MVCC 的優勢是提升讀寫并發性能,但它無法解決所有場景的并發問題,主要局限包括:

  1. 無法處理 “寫寫沖突”:多個事務同時修改同一行數據時,MVCC 只能通過 “后提交的事務覆蓋先提交的” 或 “事務回滾” 處理,無法保證修改的原子性和一致性(必須靠鎖解決);
  2. 無法滿足 “強一致性讀” 需求:如果業務要求 “讀取的數據必須是最新的,且在讀取期間不被修改”(如金融對賬、庫存扣減前的校驗),MVCC 的 “讀歷史版本” 機制就不適用了;
  3. 無法處理范圍操作的并發問題:如SELECT ... FOR UPDATE(鎖定查詢范圍內的所有行),MVCC 無法保證范圍操作的原子性(必須靠鎖鎖定范圍)

2.MVCC 和 S/X 鎖并非對立,而是協同工作

  • MVCC 負責優化 “讀寫并發”:讓讀操作無需加鎖,提升查詢性能;
  • S/X 鎖負責解決 “寫寫沖突” 和 “強一致性需求”:保證修改的原子性、數據的一致性,以及特殊場景下的讀寫安全。

例如:

  • 普通SELECT(無鎖):通過 MVCC 讀取歷史版本,不阻塞寫,提升并發;
  • SELECT ... FOR SHARE(加 S 鎖)(強一致性需求):通過 S 鎖保證讀取最新數據,且期間不被修改;
  • UPDATE/DELETE:通過 X 鎖(寫寫沖突)保證同一時間只有一個事務能修改,避免臟寫。

因此,即使有 MVCC,共享鎖和排他鎖仍是必不可少的 —— 它們解決了 MVCC 無法覆蓋的并發場景,共同保證數據庫的 ACID 特性。

5.間隙鎖和臨鍵鎖:
可以看我的另一篇博客講解

上述就是MySQL鎖的分類 && MVCC和S/X鎖的互補關系,不知道您對文章中的問題和思想是否都學會理解了呢?

能看到這里相信您一定對小編的文章有了一定的認可。

有什么問題歡迎各位大佬指出
歡迎各位大佬評論區留言修正~~

您的支持就是我最大的動力???!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93915.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93915.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93915.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第五屆智能通信與計算國際學術會議(ICICC 2025)

重要信息 官網:www.ic-icc.org 時間:2025年8月15-16日 地點:中國 南京 第五屆智能通信與計算國際學術會議(ICICC 2025)定于2025年8月15-16日在中國 南京舉行。隨著信息技術的飛速發展,智能通信與計算領域的研究與…

基于C#和NModbus4庫實現的Modbus RTU串口通信

基于C#和NModbus4庫實現的Modbus RTU串口通信&#xff0c;包含完整的界面設計和功能實現&#xff1a;一、項目依賴配置NuGet包安裝&#xff1a; Install-Package NModbus4 Install-Package System.IO.Ports窗體控件布局&#xff1a; <!-- 基礎控件配置 --> <ComboBox …

想要批量提取視頻背景音樂?FFmpeg 和轉換器都安排上

你是否遇到過這樣的情況&#xff1f;看到一個超贊的短視頻&#xff0c;里面的背景音樂特別好聽&#xff0c;想單獨保存下來當手機鈴聲或收藏&#xff0c;卻不知道怎么把音樂從視頻里“摳”出來&#xff1f;別擔心&#xff01;今天就為大家分享兩種簡單易行的方法&#xff0c;無…

為什么MCP協議是AI集成的未來API

一、企業AI應用的核心挑戰與架構演進 當前企業AI落地面臨三大核心痛點&#xff1a; ??系統集成困境??&#xff1a;需對接企業內部業務系統&#xff08;CRM/ERP等&#xff09;??異構環境兼容??&#xff1a;需整合第三方AI服務與傳統API??數據孤島突破??&#xff1…

Apache Tomcat樣例目錄session操縱漏洞解讀

【漏洞名稱】&#xff1a;Apache Tomcat樣例目錄session操縱漏洞 &#xff08;Apache Tomcat示例目錄漏洞&#xff09;【漏洞等級】&#xff1a;中危&#xff0c;5.9分。【漏洞描述】Apache Tomcat默認安裝頁面中存在examples樣例目錄&#xff0c;里面存放著Servlets、JSP、Web…

Go語言實戰案例:實現HTTP客戶端請求并解析響應

本文是 Go 網絡與并發實戰系列的第2篇&#xff0c;聚焦于如何使用 Go 實現一個 HTTP 客戶端&#xff0c;完成請求發送、響應解析、錯誤處理、Header與Body提取等完整流程。一、前言&#xff1a;為什么學習HTTP客戶端&#xff1f;在日常開發中&#xff0c;無論是調用 RESTful AP…

java的冒泡排序算法

冒泡排序是一種簡單的排序算法&#xff0c;通過重復遍歷待排序序列&#xff0c;比較相鄰元素并在必要時交換位置&#xff0c;最終實現排序。以下是Java實現的詳細說明&#xff1a;核心原理?比較相鄰元素?&#xff1a;從序列第一個元素開始&#xff0c;逐對比較相鄰元素的大小…

玻爾茲曼分布與玻爾茲曼探索

目錄 玻爾茲曼分布定義 玻爾茲曼探索&#xff1a; 1. 玻爾茲曼分布公式 2. 溫度 T 如何影響采樣結果&#xff1f; (1) 高溫 (T→∞)&#xff1a; (2) 低溫 (T→0)&#xff1a; (3) 中等溫度 (T∈(0,∞))&#xff1a; 3. 直觀示例 4. 實際應用中的意義 5.核心誤區澄清…

【工具】jsDelivr CDN完全指南:免費高速的開源項目CDN服務

前言 在現代Web開發中&#xff0c;內容分發網絡&#xff08;CDN&#xff09;已經成為提升網站性能的重要工具。jsDelivr作為一個免費、快速、可靠的開源CDN服務&#xff0c;為全球開發者提供了優質的靜態資源分發服務。無論是加速GitHub倉庫訪問、分發npm包&#xff0c;還是為…

OSPF筆記整理

一、OSPF 基礎特性1. 技術背景&#xff08;對比 RIP&#xff09;RIP 的缺陷&#xff1a;最大跳數 15 限制、周期性發送全路由表&#xff08;占用帶寬&#xff09;、收斂慢、以跳數為度量值、易產生環路、30 秒更新間隔。OSPF 的改進&#xff1a;無跳數限制&#xff08;支持大規…

sqLite 數據庫 (3):以編程方式使用 sqLite,4 個函數,以及 sqLite 移植,合并編譯

&#xff08;22&#xff09; 只有四個函數 &#xff1a;以及 &#xff1a;&#xff08;23&#xff09;以及 &#xff1a;&#xff08;24&#xff09;&#xff08;25&#xff09; sqLite 的源代碼很少 &#xff1a;&#xff08;26&#xff09;&#xff08;27&#xff09;&#x…

Nginx跨域問題與 MIME 類型錯誤深度排錯指南:解決 MIME type of “application/octet-stream“ 報錯

前言&#xff1a;在 Web 開發中&#xff0c;跨域請求和資源加載錯誤是前端工程師和運維人員經常遇到的棘手問題。本文將詳細解析 Nginx 環境下跨域配置的多種方案、gzip 類型參數的優化要點&#xff0c;以及.mjs 文件 MIME 類型錯誤的解決方法&#xff0c;并結合排錯思路和原理…

什么是大端?什么是小端?如何驗證?

什么是大端&#xff1f;什么是小端&#xff1f;如何驗證&#xff1f; 在計算機系統中&#xff0c;大端&#xff08;Big-Endian&#xff09; 和小端&#xff08;Little-Endian&#xff09; 是兩種不同的字節序&#xff08;Byte Order&#xff09;&#xff0c;用于描述多字節數據…

JavaScript 語句和函數

1. JavaScript 語句 1&#xff09;if語句 if (condition) statement1 else statement2這里的條件&#xff08;condition&#xff09;可以是任何表達式&#xff0c;并且求值結果不一定是布爾值。 ECMAScript會自動調用Boolean()函數將這個表達式的值轉換為布爾值。 如果條件…

代碼隨想錄刷題Day22

替換數字 這道題比較簡單&#xff0c;遇到字母就copy到新的字符數組&#xff0c;如果是遇到數字&#xff0c;就在新字符數組中加入number的字符串。代碼如下&#xff1a; #include<stdio.h> #include<ctype.h> #include<string.h> #define Max 1000000 int…

邏輯回歸參數調優實戰指南

邏輯回歸的參數調節參數展示 LogisticRegression(penaltyl2,dualFalse,tol1e4,C1.0,fit_interceptTrue,intercept_scaling1,class_weightNone,random_stateNone,solverliblinear,max_iter100,multi_classovr,verbose0,warm_startFalse, n_jobs1)在前面的學習中&#xff0c;我們…

cocosCreator2.4 googlePlay登錄升級、API 35、16KB內存頁面的支持

環境&#xff1a;我這里是cocosCreator 2.4.12 導出的android 工程 登錄升級 后臺收到的google 的提醒&#xff1a; 之前是通過implementation com.google.android.gms:play-services-auth:20.0.0 來獲取玩家 uid 和 郵箱&#xff0c;然后發送到我們的服務器獲取賬號。 升級…

unity avpro實現互動影游關鍵問題

創建視頻播放器?在Hierarchy面板中右鍵創建&#xff1a;Video > AVPro Video - MediaPlayer創建后會生成一個MediaPlayer對象&#xff0c;用于控制視頻播放添加視頻資源將視頻文件放入項目的StreamingAssets文件夾下在MediaPlayer組件的設置中選擇要播放的視頻文件在UI上顯…

【C找第一個只出現一次的字符】2022-8-18

緣由樣例通過&#xff0c;請問為什么錯了呢&#xff1f;(語言-c語言)-編程語言-CSDN問答 char str[100000];fgets(str, 100000, stdin);int a[26]{}, i, count 0;int len strlen(str);for (i 0; i<len; i) a[str[i] - a];for (i 0; i<len; i){if (a[str[i] - a] 1){…

MCP AI應用通信的底層機制

技術小館專注AI與Java領域的前沿技術知識庫 技術小館官網 在AI應用快速發展的今天&#xff0c;不同AI系統之間的高效通信成為技術架構的關鍵挑戰。MCP&#xff08;Model Context Protocol&#xff09;作為新一代AI應用通信協議&#xff0c;正在重新定義AI工具生態的構建方式。…