MySQL:數據庫中有哪些鎖

1、全局鎖

加上全局鎖后整個數據庫就處于只讀狀態了,這時其他線程執行以下操作,都會被阻塞:

  • 對數據的增刪改操作,比如 insert、delete、update等語句;
  • 對表結構的更改操作,比如 alter table、drop table 等語句。

全局鎖的使用場景

  1. 邏輯備份:全局鎖的典型使用場景是進行全庫邏輯備份,例如使用?mysqldump?工具。在備份期間,整個庫處于只讀狀態,確保備份的數據是一致的。
  2. 主從切換:在重新配置主從復制時,可以使用全局鎖來確保不會有其他線程對數據庫進行更新,從而保持數據一致性。

可以看出再加上全局鎖后數據庫的除查詢外的其他所有業務都被阻塞住了,性能一定很低下。我們可以再可重復讀的隔離級別下進行數據備份,備份的數據都是再開啟事務那一刻的數據,就不要開啟全局鎖來控制并發操作,防止破壞數據庫一致性了。

2、表鎖

? 2.1表鎖

  • 表鎖是一種粗粒度的鎖,它會鎖定整個表,除了會限制別的線程的讀寫外,也會限制本線程接下來的讀寫操作。
  • 表鎖適用于特定的場景,但通常不推薦使用,因為它會影響并發性能。

?2.2意向鎖

  • 意向鎖是一種表級鎖,用于指示其他事務是否已經持有了行級鎖或表級鎖。
  • 意向鎖不會阻塞其他事務,只是作為一種標記。
  • 什么時候加意向鎖:
    • 在獲取行級鎖之前,在獲取表級鎖之前都需要先加上意向鎖。

    • 意向鎖的存在表示其他事務可能已經在該表上加了表鎖/行級鎖,因此事務在獲取表級鎖/行鎖之前需要先檢查意向鎖。
  • 意向鎖的目的是為了快速判斷表里是否有記錄被加鎖

2.3?元數據鎖(MDL)

這個鎖其實是為了防止再操作數據庫表中數據時,表的結構發生了改變。

  • 對一張表進行 CRUD 操作時,加的是?MDL 讀鎖
  • 對一張表做結構變更操作的時候,加的是?MDL 寫鎖
  • 讀鎖和讀鎖不互斥,讀寫鎖互斥。再MDL鎖等待隊列中,寫鎖優先級高于讀鎖。

MDL 是在事務提交后才會釋放,這意味著事務執行期間,MDL 是一直持有的。

?2.4 AUTO-INC 鎖

  • AUTO-INC 鎖是特殊的表鎖機制,鎖不是再一個事務提交后才釋放,而是再執行完插入語句后就會立即釋放

  • 在插入數據時,會加一個表級別的 AUTO-INC 鎖,然后為被?AUTO_INCREMENT?修飾的字段賦值遞增的值,等插入語句執行完成后,才會把 AUTO-INC 鎖釋放掉。

  • nnoDB 存儲引擎提供了個 innodb_autoinc_lock_mode 的系統變量,是用來控制選擇用 AUTO-INC 鎖,還是輕量級的鎖。

  • 當 innodb_autoinc_lock_mode = 0,就采用 AUTO-INC 鎖,語句執行結束后才釋放鎖;
  • 當 innodb_autoinc_lock_mode = 2,就采用輕量級鎖,申請自增主鍵后就釋放鎖,并不需要等語句執行后才釋放。
  • 當 innodb_autoinc_lock_mode = 1:
    • 普通 insert 語句,自增鎖在申請之后就馬上釋放;
    • 類似 insert … select 這樣的批量插入數據的語句,自增鎖還是要等語句結束后才被釋放;

3、行鎖

?3.1 記錄鎖(Record Lock)

? ? ? ? 這個鎖,鎖的是一條記錄,有S鎖(共享鎖)和X鎖(排它鎖)之分。其中SS不互斥,SX互斥、XX互斥。普通的select查詢語句不會加鎖。他是通過MVCC進行快照讀。像快照讀才會進行加鎖,具體加的是S鎖還是X鎖要看執行的語句。

SELECT ... LOCK IN SHARE MODE;????????????????加共享鎖

SELECT ... FOR UPDATE;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 加互斥鎖

select * from t_test where id = 1 for update;? ?給id為1的記錄加上互斥鎖,待事務結束釋放鎖

? 3.2 間隙鎖(Gap Lock )

????????只存在于可重復讀隔離級別,目的是為了解決可重復讀隔離級別下幻讀的現象。

假設,表中有一個范圍 id 為(3,5)間隙鎖,那么其他事務就無法插入 id = 4 這條記錄了,這樣就有效的防止幻讀現象的發生。

????????間隙鎖雖然存在 X 型間隙鎖和 S 型間隙鎖,但是并沒有什么區別,間隙鎖之間是兼容的,即兩個事務可以同時持有包含共同間隙范圍的間隙鎖,并不存在互斥關系,因為間隙鎖的目的是防止插入幻影記錄而提出的。

?3.3 Next-Key Lock(臨鍵鎖)

? 臨鍵鎖是 Record Lock + Gap Lock 的組合,鎖定一個范圍,并且鎖定記錄本身。

????????假設,表中有一個范圍 id 為(3,5] 的 next-key lock,那么其他事務即不能插入 id = 4 記錄,也不能修改 id = 5 這條記錄。next-key lock 是包含間隙鎖+記錄鎖的,如果一個事務獲取了 X 型的 next-key lock,那么另外一個事務在獲取相同范圍的 X 型的 next-key lock 時,是會被阻塞的。

?3.4?插入意向鎖

????????一個事務在插入一條記錄的時候,需要判斷插入位置是否已被其他事務加了間隙鎖(next-key lock 也包含間隙鎖)。

? ? ? ??如果有的話,插入操作就會發生阻塞,直到擁有間隙鎖的那個事務提交為止(釋放間隙鎖的時刻),在此期間會生成一個插入意向鎖,表明有事務想在某個區間插入新記錄,但是現在處于等待狀態。

????????當事務 A 還沒提交的時候,事務 B 向該表插入一條 id = 4 的新記錄,這時會判斷到插入的位置已經被事務 A 加了間隙鎖,于是事物 B 會生成一個插入意向鎖,然后將鎖的狀態設置為等待狀態。此時事務 B 就會發生阻塞,直到事務 A 提交了事務。

插入意向鎖名字雖然有意向鎖,但是它并不是意向鎖,它是一種特殊的間隙鎖,屬于行級別鎖

如果說間隙鎖鎖住的是一個區間,那么「插入意向鎖」鎖住的就是一個點。因而從這個角度來說,插入意向鎖確實是一種特殊的間隙鎖。

PS:MySQL 加鎖時,是先生成鎖結構,然后設置鎖的狀態,如果鎖狀態是等待狀態,并不是意味著事務成功獲取到了鎖,只有當鎖狀態為正常狀態時,才代表事務成功獲取到了鎖。

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

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

相關文章

Android APK包反編譯為java文件教程

方法 流程: test.apk -> smali文件 -> dex文件 -> jar文件 ->java 文件 將APK包解壓為 smail文件 下載 apktool工具 apktool.jar 將 test.apk 和 apktool.jar放同一目錄下,并執行以下命令 java -jar apktool.jar d -f xxx.apk -o xxx(解…

【如何像網吧一樣弄個游戲菜單在家里】

GGmenu 個人家庭版游戲、應用管理 桌面圖標管理器

[環境配置]ssh連接報錯“kex_exchange_identification: read: Connection reset by peer”

已經被VScode ssh毒死好幾次了,都是執行命令意外中斷,然后又VSCode里連不上、本機Terminal也連不上了。。。 重啟遠程服務器,VSCode可以連上了, 系統ssh還是不行,報錯“kex_exchange_identification: read: Connecti…

容器(JAVA基礎)

一.泛型 在Java中,泛型(Generics)是JDK 5.0引入的一個新特性,它允許在定義類、接口和方法時使用類型參數(type parameters)。類型參數在使用前必須先被實際類型(如Integer、String等)替代,這個過程稱作類型實例化或類型擦除。泛型提供了編譯時類型安全,減少了運行時…

CSS~~

CSS是一門語言,用于控制網頁表現 CSS(Cascading Style Sheet):層疊樣式表 W3C標準:網頁主要由三部分組成 結構:HTML 表現: CSS 行為:JavaScript 1,CSS的導入方式 (1)內聯樣式 在標簽內部使用style屬性,屬性值是cs…

類 Unix 系統的文件目錄結構

以下是類 Unix 系統的文件目錄結構、各個目錄主要存放的文件以及縮寫的全稱的詳細說明: 根目錄 /: 全稱: Root Directory說明:根目錄是整個文件系統的起點,包含了所有其他目錄和文件。 /bin 目錄: 全稱: Binary說明&a…

Nginx最常用的指令

服務管理 sudo systemctl status nginx # nginx當前狀態 sudo systemctl reload nginx # 重新加載 nginx sudo systemctl restart nginx # 重啟nginxsudo nginx -t # 檢查語法 nginx # 啟動 nginx -s reload # 重啟 nginx -s stop # 關閉進程 nginx -s quit #…

Java學習筆記002——類的修飾符

在Java語言中,類的訪問修飾符決定了其它類能夠訪問該類的方式。類有如下4種訪問修飾符,在創建類時用于類的聲明: 1、public: 當一個類被聲明為public時,它可以從任何其他類中被訪問,無論這些類位于哪個包中。通常&am…

uniapp使用vue3語法構建自定義導航欄,適配小程序膠囊

具體代碼 <template><view class"nav-wrapper-container" :style"height:navBarHeight px"><view class"nav-status-container" :style"height:navstatusBarHeight px;" /><view v-if"isCustom" clas…

數字化轉型導師堅鵬:BLM證券公司數字化轉型戰略

BLM證券公司數字化轉型戰略 ——以BLM模型為核心&#xff0c;實現知行果合一 課程背景&#xff1a; 很多證券公司存在以下問題&#xff1a; 不知道如何系統地制定證券公司數字化轉型戰略&#xff1f; 不清楚其它證券公司數字化轉型戰略是如何制定的&#xff1f; 不知道…

Redis 淘汰策略、持久化、高可用

淘汰策略 只有 redis 內存空間已滿并且往里面寫新數據&#xff0c;才會觸發淘汰策略。通過 expire / / /pexpire 讓 key-value 過期&#xff0c;從而讓 redis 清除這個 key-value。value 的數據結構typedef struct redisObject {unsigned tpye:4;unsigned encoding:4;// 判斷哪…

個人數倉開發面試題記錄

一.廣州電商公司 1.簡單自我介紹 2.介紹下之前的公司離線數倉項目 3.mysql和hive區別&#xff1f; 4.sql的執行順序&#xff1f; 5.hive的優化 6.說下你之前公司來&#xff0c;你的技能層次在每個公司&#xff1f;你怎么評價你的技能&#xff1f; 7.你的之前業務主要是做什么&…

Linux基礎命令[10]-cmp

文章目錄 1. cmp 命令說明2. cmp 命令語法3. cmp 命令示例3.1 不加參數3.2 -b&#xff08;顯示不同的字節&#xff09;3.3 -i&#xff08;跳過字節&#xff09;3.4 -l&#xff08;顯示所有不同&#xff09;3.5 -n&#xff08;比較n個字節&#xff09;3.6 -s&#xff08;不顯示信…

el-select 不能重復選擇

el-select 不能重復選擇&#xff0c;注意&#xff1a;刪除后可以再次重新被選擇 <el-form-item><el-select v-model"attribute.attributeSelect" change"changeSelect()" placeholder"請選擇屬性分組" clearable><el-optionv-fo…

PostgreSQL restartpoint 原理詳解

背景 大部分人對 PG 的 checkpoint 機制會熟悉一點&#xff0c;但是對 restartpoint 卻不太熟悉&#xff0c;網上介紹這方面的文章也比較少。因此&#xff0c;本文將以 PG 14.7 的社區代碼為基礎&#xff0c;介紹 PG 中的 restartpoint 機制。 原理介紹 什么是 restartpoint…

華為OD技術面試案例1-2024年

背景&#xff1a; 學校背景&#xff1a;211本科工作經驗&#xff1a;1年半轉行目標&#xff1a;測試崗位 一、機考 &#xff08;得分&#xff1a;350&#xff09; 二、01.04 hr面 自我介紹選擇東莞的原因對OD&#xff08;華為研發崗位&#xff09;的看法家庭情況簡歷相關問…

信息論筆記:信息量+熵+相對熵+交叉熵+損失函數

信息論 信息量 I(x) -log( P )I為信息量P為x發生的概率 熵 混亂程度的度量&#xff0c;不確定的局面表示很混亂系統里信息量的期望值H(x) -sum( P(i) * log( P(i) ) ) 相對熵(KL散度) 用于度量兩個概率分布間的差異性信息D_KL(S | O) sum( P_S(x) * log_2( 1 / P_O(x)…

Mysql學習之各種鎖

鎖 事務的隔離性由鎖來實現 MySQL并發事務訪問相同記錄 并發事務訪問相同記錄的情況大致可以分為3種&#xff1a; 讀-讀的情況 讀-讀情況&#xff0c;即并發事務相繼讀取相同的記錄。讀取操作本身不會對記錄由有任何的影響&#xff0c;并不會引起什么問題&#xff0c;所以允許…

簡要講解OV7725攝像頭

本文主要包含以下幾部分內容&#xff1a; 1. 通過OV7725分析模塊原理圖。 2. 講解部分寄存器的含義、RGB565格式圖像輸出時序、幀率計算。 3. 講解SCCB協議與I2C協議的區別。 1、OV7725功能 OV7725是一款1/4英寸單芯片圖像傳感器&#xff0c;其感光陣列達到640*480&#xff0c…

LibreOJ 137. 最小瓶頸路(加強版) 題解 Kruscal重構樹 ST表

聲明&#xff1a;本題目是LibreOJ 136. 最小瓶頸路 題解 最小生成樹 倍增加強版&#xff0c;建議先學習簡單版的做法。 題目鏈接&#xff1a;LibreOJ 137. 最小瓶頸路&#xff08;加強版&#xff09; 題目描述&#xff1a; 給定一張無向圖&#xff0c;詢問兩個結點之間的最小瓶…