秋招Day14 - MySQL - 鎖

MySQL中有幾種類型的鎖?

鎖粒度來分,有表鎖、頁鎖和行鎖。

加鎖機制劃分,有樂觀鎖和悲觀鎖。

兼容性劃分,有共享鎖和排他鎖。

鎖模式劃分,有記錄鎖,間隙鎖,next-key鎖,意向鎖、插入意向鎖

全局鎖了解嗎??

全局鎖是對整個數據庫實例加讀鎖,整個數據庫處于只讀狀態,所有寫操作被阻塞,直到全局鎖被釋放。

使用場景是全庫備份,或者數據遷移時,使用全局鎖來保證數據的一致性。

-- 鎖定整個數據庫
FLUSH TABLES WITH READ LOCK;-- 執行備份操作
-- 例如使用 mysqldump 進行備份
! mysqldump -u username -p database_name > backup.sql-- 釋放全局鎖定
UNLOCK TABLES;

表鎖了解嗎?

常見于MyISAM引擎,InnoDB可以通過LOCK TABLES加鎖

適合讀多寫少,全表掃描和表結構變更時使用。

表鎖也分為共享鎖(讀鎖),排他鎖(寫鎖)

MyISAM在指向SELECT操作時會自動加讀鎖,UPDATE/DELETE/INSERT的時候會自動加寫鎖

對于 InnoDB 引擎,無索引的?UPDATE/DELETE?只能先進行全表掃描,可能會導致鎖大量行被鎖定,類似于表鎖。

ALTER TABLE會加排它鎖

說說MySQL的行鎖??

InnoDB中最細粒度的鎖,鎖定表中的一行記錄,允許其他事務訪問表中的其他行。

有索引的情況下,通過索引只鎖滿足條件的行無索引的情況下,全表遍歷,遍歷一行就加一行行鎖,最差的情況會鎖定所有行,直到事務完成才會釋放所有行鎖。

行鎖又可以細分為記錄鎖,間隙鎖和臨鍵鎖

通過SELECT .... FOR UPDATE可以加排它鎖。

通過SELECT .... IN SHARE MODE可以加共享鎖。?

select for update有什么需要注意的?

  • 必須在事務中使用,否則鎖會立即釋放。
  • 使用時注意是否命中索引,否則可能會鎖大量行。

說說記錄鎖

記錄鎖是行鎖的最基本的表現形式,當我們使用唯一索引或者主鍵索引進行等值查詢并顯式指定FOR UPDATE的時候,MySQL會為該行添加排它鎖類型的記錄鎖,禁止其他行讀取或修改記錄。

?注意使用非主鍵索引進行UPDATE時的鎖定路徑:輔助索引 → 主鍵索引

間隙鎖了解嗎?

范圍查詢或者不存在的記錄查詢時,用于鎖定記錄之間的間隙,防止其他事務在范圍中插入新紀錄,在可重復讀的事務隔離級別下生效,主要為了防止幻讀現象。

臨鍵鎖了解嗎?

臨鍵鎖就是間隙鎖+記錄鎖,鎖住記錄以及記錄之前的間隙,左開右閉,范圍查詢時生效。

當使用唯一索引的等值查詢匹配到一條記錄時,臨鍵鎖會退化成記錄鎖;如果沒有匹配到任何記錄,會退化成間隙鎖

意向鎖是什么?

意向鎖是一種表級鎖,表示事務打算對表中的某些行數據加鎖,但是不會先直接鎖定行數據本身。

由InnoDB自動管理,當事務需要添加行鎖時,會先在表上添加意向鎖。這樣當另一個事務要添加表鎖的時候,可以通過查看表上的意向鎖,快速判斷表級鎖與現有行鎖的沖突,避免逐行掃描。

當執行SELECT?.... LOCK IN SHARE MODE的時候,會自動添加意向共享鎖;當執行 SELECT .... FOR UPDATE的時候,會自動添加意向排他鎖。

意向鎖之間相互兼容,也不會和行鎖沖突。

當前鎖ISIXS(表級)X(表級)
IS????
IX????
S(表級)????
X(表級)????

MySQL的樂觀鎖和悲觀鎖了解嗎??

悲觀鎖是一種"先上鎖再操作"的保守策略,它假設數據被外界訪問時必然會產生沖突,因此在數據處理過程中全程加鎖,保證同一時間只有一個線程可以訪問數據。MySQL 中的行鎖和表鎖都是悲觀鎖。

樂觀鎖會假設并發操作不會總發生沖突,屬于小概率事件,因此不會在讀取數據時加鎖,而是在提交更新時才檢查數據是否被其他事務修改過。常見的實現方式有版本號機制和時間戳機制。通過在表中增加 version 字段或者 timestamp 字段來實現。

如何通過樂觀鎖和悲觀鎖解決庫存超賣的問題?

悲觀鎖通過?SELECT ... FOR UPDATE?在查詢時直接鎖定記錄,確保其他事務必須等待當前事務完成才能操作該行數據。

樂觀鎖通過在表中增加 version 字段作為判斷條件。

有遇到過MySQL的死鎖問題嗎?是如何解決的?

MySQL的死鎖問題是多個事務同時持有資源并且相互等待對方的資源釋放引起的。訪問相同的資源,但順序不同,就會導致死鎖。我用SHOW ENGINE INNODB STATUS查看死鎖信息,發現是加鎖順序不一致導致的死鎖問題,調整加鎖順序之后恢復正常。

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

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

相關文章

/var/lib/docker/overlay2目錄過大怎么辦

/var/lib/docker/overlay2 是 Docker 默認用于存儲 容器鏡像和容器運行時數據 的核心目錄,基于 overlay2 存儲驅動實現。以下是其具體作用和內容的詳細解析: 1. overlay2 目錄的作用 存儲鏡像分層結構: Docker 鏡像采用分層設計,o…

JimuReport:一款免費的數據可視化報表工具

JimuReport(積木報表)是一款免費的企業級數據可視化報表軟件,提供拖拽的方式像搭建積木一樣完成在線設計,功能涵蓋數據報表、打印設計、圖表報表、門戶設計、大屏設計等。 數據源 JimuReport 支持 30 多種數據源,包括…

Neo4j.5.X社區版創建數據庫和切換數據庫

在使用Neo4j數據庫(版本:neo4j-community-5.22.0)時,系統自帶的“neo4j”和“system”數據庫適用于日常的簡單學習和練習,但對于新的項目,將項目數據與練習數據混用會帶來諸多不便,例如查詢效率…

DAY33神經網絡

浙大疏錦行 定義了一個簡單的神經網絡,主要是掌握pytorch框架

拼團系統多層限流架構詳解

拼團系統多層限流架構詳解 一、整體架構設計理念 多層限流采用"層層設防"思想,通過網關層全局流量控制→服務層接口粒度限流→本地資源隔離→熱點參數精準防護的四級防御體系,實現從粗到細的流量治理,確保大促期間系統穩定性。 …

[ctfshow web入門] web92 `==`特性與intval特性

信息收集 和之前的題差不多,這次是使用了不嚴格相等的,詳情看這篇博客: 和 在 PHP 中有何區別?一共包含哪些部分? 首先,不能使$num 4476,然后需要使intval($num,0)4476 include("flag…

在Springboot項目部署時遇到,centos服務器上,curl請求目標地址不通 ,curl -x 可以請求通的解決辦法

在甲方服務器部署項目時,通常遇到需要開通外網權限的問題,有的是直接給開通服務器的白名單,就可以直接訪問白名單外網地址了。也有的是通過網絡轉發,將url前面的部分替換,可以進行網絡請求。有一次遇到一個罕見的&…

Python異步爬蟲編程技巧:從入門到高級實戰指南

Python異步爬蟲編程技巧:從入門到高級實戰指南 🚀 📚 目錄 前言:為什么要學異步爬蟲異步編程基礎概念異步爬蟲核心技術棧入門實戰:第一個異步爬蟲進階技巧:并發控制與資源管理高級實戰:分布式…

JMeter-SSE響應數據自動化3.0

背景 此次因為多了一些需要過濾排除的錯誤(數量很少),還需要修改下JMeter的jtl文件輸出數據(后續統計數據需要) 所以只涉及到JSR腳本的一些改動(此部分改動并不會影響到JMeter的HTML報告) 改動 主要通過設置JMeter中prev輸出數據變量threadN…

012 進程狀態和優先級

🦄 個人主頁: 小米里的大麥-CSDN博客 🎏 所屬專欄: Linux_小米里的大麥的博客-CSDN博客 🎁 GitHub主頁: 小米里的大麥的 GitHub ?? 操作環境: Visual Studio 2022 文章目錄 進程狀態和優先級一、進程狀態分類特殊狀態說明 二、如何查看進程…

React JSX原理

JSX本質 實質上是React.createElement()的語法糖

Java-51 深入淺出 Tomcat 手寫 Tomcat 類加載機制 雙親委派機制 生命周期 插件化

點一下關注吧!!!非常感謝!!持續更新!!! 🚀 AI篇持續更新中!(長期更新) 目前2025年06月13日更新到: AI煉丹日志-28 - Aud…

從C++編程入手設計模式——責任鏈模式

從C編程入手設計模式——責任鏈模式 ? 當我們的一個請求需要多個對象去處理,但具體由誰來處理,是根據情況動態決定的。例如,一個日志系統中,可能希望把錯誤信息寫入文件,把提示信息輸出到控制臺,而不是每…

泛型方法調用需要顯示指定泛型類型的場景

泛型類型的推斷確定 一般來說&#xff0c;泛型類型的推斷可以由以下幾個場景確定&#xff1a; 變量定義指定類型 List<String> strList new ArrayList<>();ArrayList的泛型類型是依據變量的類型確定的。 方法返回值確定 Overridepublic Function<List<I…

Deep Research:開啟深度研究的智能新時代

在當今信息爆炸的時代&#xff0c;人們面臨著海量的信息&#xff0c;無論是專業人士還是普通消費者&#xff0c;都迫切需要一種高效、精準的方式來獲取和分析信息。OpenAI 推出的 Deep Research&#xff0c;宛如一顆璀璨的新星&#xff0c;在知識的海洋中為我們導航&#xff0c…

曼昆《經濟學原理》第九版 宏觀經濟學 第二十四章失業與自然失業率

以下是曼昆《經濟學原理》第九版宏觀經濟學第二十四章**“失業與自然失業率”**的詳細講解&#xff0c;從零基礎開始構建知識框架&#xff0c;結合中國實際案例與生活化比喻&#xff0c;幫助小白系統理解核心概念&#xff1a; 一、知識框架&#xff1a;失業的“全景圖” 1. 核…

【軟考高級系統架構論文】論軟件系統架構風格

論文真題 請以“軟件系統架構風格”為論題,依次從以下三個方面進行論述: 1、概要敘述你參與分析和開發的軟件系統開發項目以及你所擔任的主要工作。 2、分析軟件系統開發中常用的軟件系統架構風格有哪些?詳細闡述每種風格的具體含義。 3、詳細說明在你所參與的軟件系統開發項…

LeetCode--35.搜索插入位置

解題思路&#xff1a; 1.獲取信息&#xff1a; 給定一個升序排列的數組和一個整數&#xff0c;要求查找該整數應該在數組中插入的位置 限制條件是&#xff0c;要求時間復雜度為O(log N) 2.分析題目&#xff1a; 時間復雜度要求O(log N)&#xff0c;那么就使用二分查找法&#x…

Unix、Linux、POSIX、Minix 區別與聯系

一、Unix&#xff1a;現代操作系統的技術原型 誕生&#xff1a;1969年貝爾實驗室&#xff0c;用C語言重寫后實現跨平臺&#xff08;1973年&#xff09;。核心設計&#xff1a; 一切皆文件&#xff08;設備/進程均抽象為文件&#xff09;。管道&#xff08;|&#xff09;和文本…

python計算長方形的周長 2025年3月青少年電子學會等級考試 中小學生python編程等級考試一級真題答案解析

python計算長方形的周長 2025年3月 python編程等級考試一級編程題 博主推薦 所有考級比賽學習相關資料合集【推薦收藏】 1、Python比賽 信息素養大賽Python編程挑戰賽 藍橋杯python選拔賽真題詳解 藍橋杯python省賽真題詳解 藍橋杯python國賽真題詳解 2、Python考級 p…