淺析MySQL事務鎖

在 MySQL 中,事務鎖是用于確保數據一致性和并發控制的重要機制。事務鎖可以幫助防止多個事務同時修改同一數據,從而避免數據不一致和臟讀、不可重復讀、幻讀等問題。
以下是 MySQL 事務鎖的關鍵點總結:

  1. 事務鎖:用于確保數據一致性和并發控制。
  2. 鎖的類型
    • 行級鎖:InnoDB,粒度細,性能高。
    • 表級鎖:MyISAM,粒度粗,性能低。
  3. 鎖的獲取與釋放:通過 SELECT ... LOCK IN SHARE MODESELECT ... FOR UPDATE 獲取鎖,事務提交或回滾時釋放鎖。
  4. 常見鎖類型
    • 共享鎖(S 鎖):允許多個事務讀取,阻止修改。
    • 排他鎖(X 鎖):阻止其他事務讀取和修改。
    • 意向鎖(IS, IX, SIX 鎖):表示事務的意圖。
    • 間隙鎖(Gap Locks):防止幻讀。
    • 記錄鎖(Record Locks):鎖定具體的行。
    • 間隙加記錄鎖(Next-Key Locks):鎖定索引記錄及其前后間隙。
  5. 事務隔離級別:影響鎖的使用和數據一致性。
  6. 鎖沖突:了解鎖沖突和死鎖,優化事務邏輯。
  7. 鎖的優化:減少鎖持有時間,選擇合適的隔離級別,使用索引,避免死鎖。
  8. 監控與診斷:使用 SHOW ENGINE INNODB STATUSinformation_schema 查看鎖信息。

詳述:

文章目錄

      • **1. 事務鎖概述**
        • **1.1 什么是事務鎖?**
        • **1.2 事務隔離級別**
      • **2. 鎖的類型**
        • **2.1 行級鎖(Row-Level Locks)**
        • **2.2 表級鎖(Table-Level Locks)**
      • **3. 鎖的獲取與釋放**
        • **3.1 獲取鎖**
        • **3.2 釋放鎖**
      • **4. 常見鎖類型**
        • **4.1 共享鎖(Shared Lock, S 鎖)**
        • **4.2 排他鎖(Exclusive Lock, X 鎖)**
        • **4.3 意向鎖(Intention Locks)**
        • **4.4 間隙鎖(Gap Locks)**
        • **4.5 記錄鎖(Record Locks)**
        • **4.6 間隙加記錄鎖(Next-Key Locks)**
      • **5. 示例**
        • **5.1 使用共享鎖(S 鎖)**
        • **5.2 使用排他鎖(X 鎖)**
        • **5.3 使用間隙鎖(Gap Locks)**
        • **5.4 使用記錄鎖(Record Locks)**
        • **5.5 使用間隙加記錄鎖(Next-Key Locks)**
      • **6. 鎖沖突**
        • **6.1 鎖沖突示例**
        • **6.2 死鎖**
      • **7. 事務隔離級別與鎖的關系**
        • **7.1 讀未提交(Read Uncommitted)**
        • **7.2 讀已提交(Read Committed)**
        • **7.3 可重復讀(Repeatable Read)**
        • **7.4 串行化(Serializable)**
      • **8. 鎖的優化**
        • **8.1 減少鎖持有時間**
        • **8.2 選擇合適的隔離級別**
        • **8.3 使用索引**
        • **8.4 避免死鎖**
      • **9. 監控與診斷**
        • **9.1 查看鎖信息**
        • **9.2 使用 `information_schema`**
      • **10. 示例代碼**
        • **10.1 創建表**
        • **10.2 使用共享鎖**
        • **10.3 使用排他鎖**

1. 事務鎖概述

1.1 什么是事務鎖?
  • 事務鎖:在事務執行期間,數據庫系統使用鎖來控制對數據的訪問,確保事務的隔離性和一致性。
  • 目的
    • 防止臟讀:一個事務讀取了另一個事務未提交的數據。
    • 防止不可重復讀:一個事務多次讀取同一數據時,數據被其他事務修改。
    • 防止幻讀:一個事務在兩次查詢之間,其他事務插入了新的數據行。
1.2 事務隔離級別
  • 讀未提交(Read Uncommitted):最低的隔離級別,允許臟讀。
  • 讀已提交(Read Committed):不允許臟讀,但允許不可重復讀和幻讀。
  • 可重復讀(Repeatable Read):默認隔離級別,不允許臟讀和不可重復讀,但允許幻讀。
  • 串行化(Serializable):最高的隔離級別,完全串行化事務,不允許臟讀、不可重復讀和幻讀。

2. 鎖的類型

2.1 行級鎖(Row-Level Locks)
  • 適用存儲引擎:InnoDB
  • 特點
    • 粒度細:只鎖定特定的行,減少鎖沖突。
    • 性能高:適用于高并發場景。
  • 類型
    • 共享鎖(Shared Lock, S 鎖):允許多個事務同時讀取同一行,但阻止其他事務修改該行。
    • 排他鎖(Exclusive Lock, X 鎖):阻止其他事務讀取和修改該行。
2.2 表級鎖(Table-Level Locks)
  • 適用存儲引擎:MyISAM、InnoDB(某些情況下)
  • 特點
    • 粒度粗:鎖定整個表,可能導致高并發下的性能瓶頸。
    • 簡單:實現簡單,但可能導致鎖沖突。
  • 類型
    • 讀鎖(Read Lock):允許多個事務同時讀取表,但阻止其他事務寫入表。
    • 寫鎖(Write Lock):阻止其他事務讀取和寫入表。

3. 鎖的獲取與釋放

3.1 獲取鎖
  • 共享鎖:使用 SELECT ... LOCK IN SHARE MODE
    SELECT * FROM table_name WHERE id = 1 LOCK IN SHARE MODE;
    
  • 排他鎖:使用 SELECT ... FOR UPDATE
    SELECT * FROM table_name WHERE id = 1 FOR UPDATE;
    
3.2 釋放鎖
  • 自動釋放:事務提交(COMMIT)或回滾(ROLLBACK)時自動釋放鎖。
  • 顯式釋放:某些情況下可以通過特定的 SQL 語句釋放鎖。

4. 常見鎖類型

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

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

相關文章

vue3 文件下載(excel/rar/zip)

安裝axios npm install axios 在項目中引入 import axios from axios; 1、get接口excel文件下載 const file_key ref() const downLoadExcel (value:any) > {//file_key.value value axios({method: "get",url: "/api/da/download_excel/",//url:…

RT-Thread RTThread studio 初使用

RT-Thread Studio 下載 https://www.rt-thread.org/studio.html 安裝使用 https://bbs.elecfans.com/jishu_2425653_1_1.html 4 編譯問題解決 問題一:error: unknown type name clock_t 具體的類型值是在sys/_types.h中定義的,需要包含sys/_types.h 這個…

漢諾塔專題:P1760 通天之漢諾塔 題解 + Problem D: 漢諾塔 題解

1. P1760 通天之漢諾塔 題解 題目背景 直達通天路小A歷險記第四篇 題目描述 在你的幫助下,小 A 成功收集到了寶貴的數據,他終于來到了傳說中連接通天路的通天山。但是這距離通天路仍然有一段距離,但是小 A 突然發現他沒有地圖&#xff0…

探索 HumanoidBench:類人機器人學習的新平臺

在科技飛速發展的當下,類人機器人逐漸走進我們的視野,它們有著和人類相似的外形,看起來能像人類一樣在各種環境里完成復雜任務,潛力巨大。但實際上,讓類人機器人真正發揮出實力,還面臨著重重挑戰。 這篇文…

數據結構中的寶藏秘籍之廣義表

廣義表,也被稱作列表(Lists),是一種遞歸的數據結構。它就像一個神秘的盒子,既可以裝著單個元素(原子),也可以嵌套著其他的盒子(子列表)。比如廣義表 (a (b c)…

【jenkins】首次配置jenkins

第一步,輸入管理員密碼 cat /var/jenkins_home/secrets/initialAdminPassword第二步,點擊安裝推薦的插件 第三步,創建管理員用戶 第四步,返回實例 第五步, 升級jenkins 第六步, 修復提示 第七步&#xff0c…

Android studio—socketIO庫return與emit的使用

文章目錄 一、Socket.IO庫簡單使用說明1. 后端 Flask Flask-SocketIO2. Android 客戶端集成 Socket.IO3. 布局文件注意事項 二、接受服務器消息的二種方法1. 客戶端接收通過 emit 發送的消息功能使用場景后端代碼(Flask-SocketIO)客戶端代碼&#xff08…

用Prompt 技術【提示詞】打造自己的大語言智能體

機器如何按照人類的指令執行任務的探索 機器需具備理解任務敘述的能力,以便能夠按照人類的指令執行任務,為機器提供一些范例作為參考,使其能夠理解該執行的任務類型。這樣的學習方式稱為“Instruction learning”,透過精心設計的…

Node.js 數據庫 事務 項目示例

1、參考:JavaScript語言的事務管理_js 函數 事務性-CSDN博客 或者百度搜索:Nodejs控制事務, 2、實踐 2.1、對于MySQL或MariaDB,你可以使用mysql或mysql2庫,并結合Promise或async/await語法來控制事務。 使用 mysql2…

【Mamba】MambaVision論文閱讀

文章目錄 MambaVision一、研究背景(一)Transformer vs Mamba?(二)Mamba in CV? 二、相關工作?(一)Transformer 在計算機視覺領域的進展?(二)Mamba 在計算機視覺領域的探索? 三、…

前端面試寶典---原型鏈

引言----感謝大佬的講解 大佬鏈接 原型鏈示意圖 原型鏈問題中需要記住一句話:一切變量和函數都可以并且只能通過__proto__去找它所在原型鏈上的屬性與方法 原型鏈需要注意的點 看上圖可以發現 函數(構造函數)也可以通過__proto__去找到原…

C語言---FILE結構體

一、FILE 結構體的本質與定義 基本概念 FILE 是 C 語言標準庫中用于封裝文件操作的結構體類型&#xff0c;定義于 <stdio.h> 中。它代表一個“文件流”&#xff0c;可以是磁盤文件、標準輸入輸出&#xff08;stdin/stdout/stderr&#xff09;或其他輸入輸出設備。 實現特…

基于大模型的直腸息肉診療全流程風險預測與方案優化研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與創新點 二、大模型技術概述 2.1 大模型原理簡介 2.2 大模型在醫療領域應用現狀 三、直腸息肉術前預測與準備 3.1 基于大模型的術前風險預測 3.1.1 息肉性質預測 3.1.2 手術難度預測 3.2 基于預測結果的術前準備 3.…

華為OD機試真題——MELON的難題(2025A卷:200分)Java/python/JavaScript/C++/C語言/GO六種最佳實現

2025 A卷 200分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析&#xff1b; 并提供Java、python、JavaScript、C、C語言、GO六種語言的最佳實現方式&#xff01; 2025華為OD真題目錄全流程解析/備考攻略/經驗分享 華為OD機試真題《MELON的…

AI數據分析與BI可視化結合:解鎖企業決策新境界

大家好&#xff0c;今天我們來聊聊一個前沿而熱門的話題——AI數據分析與BI可視化結合&#xff0c;如何攜手推動企業決策邁向新高度。在數據爆炸的時代&#xff0c;企業如何高效利用這些數據&#xff0c;成為制勝的關鍵。AI數據分析與BI可視化的結合&#xff0c;正是解鎖這一潛…

克服儲能領域的數據處理瓶頸及AI拓展

對于儲能研究人員來說&#xff0c;日常工作中經常圍繞著一項核心但有時令人沮喪的任務&#xff1a;處理實驗數據。從電池循環儀的嗡嗡聲到包含電壓和電流讀數的大量電子表格&#xff0c;研究人員的大量時間都花在了提取有意義的見解上。長期以來&#xff0c;該領域一直受到對專…

【SpringBoot+Vue自學筆記】002 SpringBoot快速上手

跟著這位老師學習的&#xff1a;https://www.bilibili.com/video/BV1nV4y1s7ZN?vd_sourceaf46ae3e8740f44ad87ced5536fc1a45 最好和老師的idea版本完全一致&#xff01;截至本文寫的當日最新的idea好像默認jdk17&#xff0c;配置時遇到很多bug。 &#x1f33f; Spring Boot&a…

SpringAI+DeepSeek大模型應用開發——2 大模型應用開發架構

目錄 2.大模型開發 2.1 模型部署 2.1.1 云服務-開放大模型API 2.1.2 本地部署 搜索模型 運行大模型 2.2 調用大模型 接口說明 提示詞角色 ?編輯 會話記憶問題 2.3 大模型應用開發架構 2.3.1 技術架構 純Prompt模式 FunctionCalling RAG檢索增強 Fine-tuning …

藍橋杯12. 日期問題

日期問題 原題目鏈接 題目描述 小明正在整理一批歷史文獻。這些歷史文獻中出現了很多日期。 小明知道這些日期都在 1960 年 1 月 1 日 至 2059 年 12 月 31 日 之間。 令小明頭疼的是&#xff0c;這些日期采用的格式非常不統一&#xff1a; 有的采用 年/月/日有的采用 月…

STM32使用rand()生成隨機數并顯示波形

一、隨機數生成 1、加入頭文件&#xff1a;#include "stdlib.h" 2、定義一個用作生成隨機數種子的變量并加入到滴答定時器中不斷自增&#xff1a;uint32_t run_times 0; 3、設置種子&#xff1a;srand(run_times);//每次生成隨機數前調用一次為佳 4、生成一個隨…