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

一文搞懂MySQL?數(shù)據(jù)庫意向鎖

 更新時間:2026年01月10日 11:20:27   作者:君九@DBA  
意向鎖是InnoDB的多粒度鎖機(jī)制中的一種關(guān)鍵機(jī)制,用于聲明事務(wù)將對表中的某些行加行鎖,從而在加表鎖時避免掃描所有行鎖,是InnoDB自動維護(hù)的表級鎖,本文給大家介紹MySQL數(shù)據(jù)庫意向鎖,感興趣的朋友跟隨小編一起看看吧

在本篇開始閱讀前,建議看下《MySQL數(shù)據(jù)庫 意向鎖(初篇)》章節(jié),對意向所有個大概了解。

一、用“分層鎖”的圖示理解意向鎖(核心)

InnoDB 使用的是 多粒度鎖(Multi-Granularity Locking)

數(shù)據(jù)庫
 └── 表(意向鎖 IS / IX)
      └── 行(S / X)

規(guī)則一句話版

想鎖行,必須先在表上“打個招呼”

示例:更新一行數(shù)據(jù)

START TRANSACTION;
UPDATE orders SET status = 'paid' WHERE id = 10;

鎖的實際過程是:

1?? 給 orders 表加 IX(意向排他鎖)
2?? 給 id = 10 這一行加 X(排他鎖)

?? 意向鎖 = “我打算動你表里的某些行”

二、為什么沒有意向鎖會很慘?

假設(shè):沒有意向鎖

  • orders1000 萬行
  • 事務(wù) A:更新其中 1 行
  • 事務(wù) B:想加表鎖
LOCK TABLE orders WRITE;

?? MySQL 只能:

  • 掃描 1000 萬行
  • 看看有沒有行鎖

為此,就會引發(fā):?? 性能災(zāi)難

有了意向鎖之后

操作檢查內(nèi)容
行鎖不管表鎖
表鎖只看 IS / IX

?? O(1) 判斷是否沖突

三、意向鎖 vs 表鎖 vs 行鎖(對比表)

鎖類型級別是否阻塞行鎖是否阻塞表鎖
IS?阻塞表 X
IX?阻塞表 S / X
S行級互斥
X行級互斥
S(表)阻塞 IX阻塞 X
X(表)全阻塞全阻塞

?? 重點

意向鎖幾乎只和“表鎖”打架,不和“行鎖”打架

四、為什么 MyISAM 不需要意向鎖?

MyISAM 的鎖模型

  • ? 不支持行鎖
  • ? 只有表鎖
要么整張表讀
要么整張表寫

?? 不存在:

  • 行鎖
  • 表鎖與行鎖并存
  • 自然 不需要意向鎖

InnoDB 的優(yōu)勢(但更復(fù)雜)

存儲引擎并發(fā)鎖模型
MyISAM表鎖
InnoDB行鎖 + 意向鎖

五、一個非常經(jīng)典的死鎖場景(面試??迹?/h2>

場景描述

user

idname
1A
2B

事務(wù) A

START TRANSACTION;
SELECT * FROM user WHERE id = 1 FOR UPDATE;

鎖狀態(tài):

user 表:IX
id=1 行:X

事務(wù) B

START TRANSACTION;
LOCK TABLE user WRITE;

B 想要:

user 表:X

? 但被 A 的 IX 阻塞

接著事務(wù) A 再做:

SELECT * FROM user WHERE id = 2 FOR UPDATE;

此時:

  • A 等待表鎖釋放
  • B 等待 IX 消失

?? 死鎖形成

?? InnoDB 會:

  • 自動檢測
  • 回滾其中一個事務(wù)

六、如何在生產(chǎn)中“看到”意向鎖?

1?? 查看當(dāng)前鎖(MySQL 8.0)

SELECT * FROM performance_schema.data_locks;

你會看到類似:

OBJECT_NAME = orders
LOCK_TYPE = TABLE
LOCK_MODE = IX

2?? 常見 LOCK_MODE 含義

LOCK_MODE含義
IS意向共享
IX意向排他
S共享
X排他

七、一句話總結(jié)

意向鎖是 InnoDB 自動維護(hù)的表級鎖,用來聲明事務(wù)將對表中的某些行加行鎖,從而在加表鎖時避免掃描所有行鎖,是多粒度鎖機(jī)制的關(guān)鍵。

到此這篇關(guān)于一文搞懂MySQL 數(shù)據(jù)庫意向鎖的文章就介紹到這了,更多相關(guān)mysql 數(shù)據(jù)庫意向鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • MySQL 觸發(fā)器的基礎(chǔ)操作(六)

    MySQL 觸發(fā)器的基礎(chǔ)操作(六)

    這篇文章主要為大家詳細(xì)介紹了MySQL 觸發(fā)器的基礎(chǔ)操作,告訴大家什么是MySQL觸發(fā)器,如何查看觸發(fā)器,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Mysql安裝與配置調(diào)優(yōu)及修改root密碼的方法

    Mysql安裝與配置調(diào)優(yōu)及修改root密碼的方法

    這篇文章給大家介紹了Mysql安裝與配置調(diào)優(yōu),然后在文中給大家提到了mysql修改root密碼的多種方法,需要的的朋友參考下吧
    2017-07-07
  • MySQL substr函數(shù)使用方法詳解

    MySQL substr函數(shù)使用方法詳解

    MySQL substr函數(shù)是指從一個內(nèi)容中,按照指定條件,「截取」一個字符串,這個內(nèi)容可以是數(shù)值或字符串,本文就來給大家講講MySQL substr函數(shù)的使用方法,需要的朋友可以參考下
    2023-07-07
  • mysql數(shù)據(jù)插入效率比較

    mysql數(shù)據(jù)插入效率比較

    今天小編就為大家分享一篇關(guān)于mysql數(shù)據(jù)插入效率比較,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • mysql 5.7.14 安裝配置圖文教程

    mysql 5.7.14 安裝配置圖文教程

    這篇文章主要為大家分享了mysql 5.7.14安裝配置方法圖文教程,感興趣的朋友可以參考一下
    2016-08-08
  • 探討:sql插入空,默認(rèn)1900-01-01 00:00:00.000的解決方法詳解

    探討:sql插入空,默認(rèn)1900-01-01 00:00:00.000的解決方法詳解

    本篇文章是對sql插入空,默認(rèn)1900-01-01 00:00:00.000的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • mysql8.0.2離線安裝配置方法圖文教程

    mysql8.0.2離線安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql8.0.2離線安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • MySQL在線開啟或禁用GTID模式

    MySQL在線開啟或禁用GTID模式

    本文詳細(xì)講解了MySQL在線開啟或禁用GTID模式的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • MySQL 數(shù)據(jù)庫函數(shù)庫

    MySQL 數(shù)據(jù)庫函數(shù)庫

    MySQL 數(shù)據(jù)庫函數(shù)庫...
    2006-12-12
  • MySQL DATE_SUB()函數(shù)的實現(xiàn)示例

    MySQL DATE_SUB()函數(shù)的實現(xiàn)示例

    本文主要介紹了MySQL DATE_SUB() 函數(shù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03

最新評論

旬邑县| 南城县| 黄龙县| 祥云县| 武汉市| 玉屏| 鄂托克前旗| 南投县| 蓝田县| 博客| 文水县| 太康县| 大埔区| 福海县| 山东省| 巧家县| 新化县| 财经| 万宁市| 彭阳县| 黔西县| 历史| 即墨市| 阆中市| 麻栗坡县| 延寿县| 横峰县| 潞西市| 武安市| 调兵山市| 德安县| 喀喇| 壶关县| 舟山市| 松桃| 兴海县| 墨竹工卡县| 明星| 九龙坡区| 徐汇区| 龙陵县|