?什么是排他鎖、共享鎖、意向鎖

共享鎖

共享鎖,又被稱為讀鎖,是由讀取操作所創建的一種鎖。在此期間,其他用戶可以同時讀取數據,但在數據上未釋放所有共享鎖之前,任何事務均無法對其進行修改(即獲取數據的排他鎖)。

一旦事務T對數據A加上共享鎖,其他事務只能對A再加共享鎖,而無法加排他鎖。獲得共享鎖的事務僅可讀取數據,不可修改數據。

SELECT ... LOCK IN SHARE MODE;

在查詢語句后增加LOCK IN SHARE MODE,MySQL會對查詢結果中的每一行都加上共享鎖。當沒有其他線程對查詢結果集中的任何一行使用排他鎖時,可以成功申請共享鎖;否則會被阻塞。其他線程也可以讀取已被共享鎖保護的表,且這些線程讀取的是同一版本的數據。

排他鎖

排他鎖又稱為寫鎖。如果事務T對數據A加上排他鎖,則其他事務無法對A加任何類型的鎖。獲得排他鎖的事務既能讀取數據,又能修改數據。

SELECT ... FOR UPDATE;

在查詢語句后增加FOR UPDATE,MySQL會對查詢結果中的每一行記錄都加上排他鎖。只有在沒有其他線程對查詢結果集中的任何一行使用排他鎖時,才能成功申請排他鎖;否則會被阻塞。

意向鎖

在MySQL的InnoDB引擎中,支持多種鎖級別,其中包括行級鎖和表級鎖。當多個事務需要訪問同一共享資源時,如果每個事務都直接請求獲取鎖,可能會發生相互阻塞的情況,甚至可能導致死鎖的產生。

舉個例子:

假設事務A對表Table1中的某一行加上了行級鎖,這使得該行記錄只能被讀取而不能被修改。同時,事務B試圖對Table1增加表級鎖。如果事務B成功獲取了表級鎖,那么它就可以修改表中的任意一行記錄,這就導致了沖突。

為了解決這個問題,需要讓事務B在嘗試對Table1增加表級鎖之前,先判斷是否有其他事務已經對該表的某行加了行級鎖。但是,事務B顯然不能遍歷整個表的數據逐條進行判斷是否有加鎖。

因此,MySQL引入了意向鎖機制。意向鎖是數據庫管理系統中用于實現鎖協議的一種機制,旨在處理不同鎖粒度(如行鎖和表鎖)之間的并發性問題。這種機制幫助解決了不同鎖粒度之間的并發問題,而對于相同鎖粒度之間的并發問題,可以通過行級互斥鎖來解決。

注意:

  1. 意向鎖并非直接用于鎖定資源,而是用于通知其他事務,以避免它們在資源上設置不兼容的鎖。
  2. 意向鎖并非由用戶直接請求,而是由MySQL管理的。

當一個事務請求獲取行級鎖或表級鎖時,MySQL會自動獲取相應表的意向鎖。這樣,其他事務在請求獲取表鎖時,就可以首先基于這個意向鎖來發現是否已經有其他事務加過鎖,并根據該鎖的類型(意向共享鎖/意向排他鎖)來判斷自己是否可以獲取鎖。通過這種方式,可以在不阻塞其他事務的情況下,為當前事務鎖定資源。意向鎖有兩種類型:意向共享鎖和意向排他鎖。

  1. 意向共享鎖:表示事務打算在資源上設置共享鎖(讀鎖)。通常用于表明事務計劃讀取資源,并希望在讀取時不會有其他事務設置排他鎖。
  2. 意向排他鎖:表示事務打算在資源上設置排他鎖(寫鎖)。這表示事務計劃修改資源,并不希望有其他事務同時設置共享或排他鎖。

意向鎖是一種表級鎖,在觸發意向鎖的事務提交或回滾后會被釋放。

如有問題,歡迎加微信交流:w714771310,備注- 技術交流 ?。或微信搜索【碼上遇見你】。

免費的Chat GPT可微信搜索【AI貝塔】進行體驗,無限使用。

好了,本章節到此告一段落。希望對你有所幫助,祝學習順利。

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

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

相關文章

202009青少年軟件編程(Python)等級考試試卷(三級)

第 1 題 【單選題】 通過算式123122021120可將二進制1101 轉為十進制,下列進制轉換結果正確的是?( ) A :0b10轉為十進制,結果是2 B :0d10轉為十進制,結果是8 C :0x10轉為十進制,結果是10 D :0o10轉為十進制,結果是16 正確答案:A 試題解析: 第 2 題 【單選題】 語句flo…

基于Nios-II實現流水燈

文章目錄 一、新建項目1、選擇芯片2、Qsys設計2.1、點擊Platform Designer2.2配置軟核2.3其他設置 3、Quartus設計3.1添加原理圖3.2添加qip文件3.3其他設置3.4驅動設置 4、Nios-II Eslipse設計參考 一、新建項目 使用的Quartus 18.0及以上版本 1、選擇芯片 2、Qsys設計 2.1、點…

【AIGC調研系列】你好-GPT-4o

GPT-4o是OpenAI最新發布的一款人工智能模型,它具備處理和生成文本、音頻和圖像的能力。這個模型的特點是能夠實時對這些不同類型的輸入進行推理和響應,這使得它在多模態交互方面表現出色[1][2][3]。 GPT-4o的“o”代表“omni”,意味著它是一…

【復試分數線】綜合性985歷年分數線匯總(第四彈)

國家線和34所自劃線 可以看作是考研上岸最最最基礎的門檻。真正決定你能不能進入復試的還要看院線(復試分數線)!今天我將分析考信號的除C9、工科類985的其他7所985近三年復試分數線(不包括2024),大家可以參…

Azure IoT Hub是啥

1.概要說明 Azure IoT Hub是微軟在物聯網(IoT)領域提供的一款重要產品,為設備連接和管理提供了專業的解決方案。以下是關于Azure IoT Hub的詳細介紹: 定義:Azure IoT Hub是一個專為連接和管理數百萬臺物聯網設備而設計…

flutter開發實戰-人臉識別相機使用

flutter開發實戰-人臉識別相機使用 當需要拍攝的時候,需要檢測到人臉再進行后續的操作,這里使用的是face_camera 一、引入face_camera 在工程的pubspec.yaml中引入插件 # 檢測人臉face_camera: ^0.0.8iOS端需要設置相關權限 在info.plist文件中&…

如何按住ctrl滑動鼠標桌面圖標大小不變

如何按住ctrl滑動鼠標桌面圖標大小不變 采取以下步驟: 1、鼠標在電腦桌面空白處單擊右鍵,然后在彈出的對話框最上面有個“查看”,點擊“查看”出來的最上面有“大圖標”“中等圖標”“小圖標”,根據自己的需要選擇圖標大小即可。…

網絡安全快速入門(九)MySQL進階操作

上一章我們了解了對表及庫的基本增刪查改操作,本章我們針對增刪查改內容進行與一些拓展, 9.1字段修飾及數據類型 我們之前在創建表時用到的格式為: create table 表名 ( 字段名1 字段數據類型(數據類型長度), 字段名2 …

Pytorch學習-調整torchvision.models中模型輸出類別數

假設你的類別只有10個,而torchvision.models中Vgg16的輸出類別為1000,這時應該如何調整呢? 方法一,直接修改模型中類別的輸出。 from torch.nn import Linear import torchvision import torchVgg16torchvision.models.vgg16(pre…

華為認證大數據是什么?華為認證大數據有用嗎?

華為大數據是用來搜集整理大數據,提供解決方案的數據中心。華為大數據解決方案是華為公司推出的一種綜合性云解決方案,主要針對廣告營銷、電商、車聯網等大數據應用場景的云計算大數據方案,幫助企業用戶構建大數據平臺,解決企業的…

GRE over IPsec VPN實驗

一、拓撲圖 二、組網需求 某企業總部、分支1、分支2分別通過 R1,R3,R4 接入互聯網,配置默認路由連通公網按照圖示配置 IP 地址,R1,R3,R4 分別配置 Loopback0 口匹配感興趣流,Loopback1 口模擬業…

GPIO輸出速度(ARM-GD32)

單片機輸出速度對GPIO硬件的影響 如果T為100ns 那么2/3*100ns 67ns 那么tr tf 38 ns (也就是不能超過32ns) tr 和tf和什么東西有關如何去控制 CL 是一個電容,電容會改變和影響電壓變化的速率,輸出高低電平也就是對電容進行充電…

【噪聲學習】SELFIE:更新不干凈樣本的魯棒性深度學習

SELFIE: Refurbishing Unclean Samples for Robust Deep Learning 摘要: 由于深度神經網絡具有極高的表達能力,其副作用是即使在標簽噪聲極高的情況下也能完全記住訓練數據。為了克服對噪聲標簽的過度擬合,我們提出了一種名為 SELFIE 的新型魯棒訓練方法。我們的主要想法是…

俄羅斯方塊【python,小游戲】

俄羅斯方塊(Tetris)是一款經典的俄羅斯益智游戲,游戲的核心玩法是通過移動、旋轉和放置不同形狀的方塊,使它們在游戲界面的底部形成完整的水平線。一旦水平線填滿,就會被清除,為新的方塊騰出空間。 在 Pyt…

Python GUI開發- PyQt5 開發小工具環境入門

前言 常見的python開發gui的庫有 Tkinter, PyQt5, wxPython等。本教程是選擇PyQt5 開發桌面小工具。 環境準備 只需pip安裝即可快速準備好開發環境 pip install pyqt5快速開始 創建一個空的window窗口 Qapplication():每個GUI都必須包含…

【Linux】:文本編輯與輸出命令 輕松上手nano、echo和cat

🎥 嶼小夏 : 個人主頁 🔥個人專欄 : Linux深造日志 🌄 莫道桑榆晚,為霞尚滿天! 文章目錄 📑前言一、nano1.1 打開文件:1.2 常用快捷鍵:1.3 其他功能&#xff…

讀人工智能時代與人類未來筆記03_演變

1. 演變 1.1. 每個社會都找到了屬于自己的一套適應世界的方法 1.1.1. 適應的核心,是有關人類心智與現實之間關系的概念 1.1.2. 人類認識周圍環境的能力 1.1.2.1. 這種能力通過知識獲得,同時也受到知識…

【渲染數學-01】如何模擬靜態流(上)

文章目錄 一、說明二、摘要三、簡介四、穩定的納維-斯托克斯4.1 基本方程4.2 解決方法 一、說明 關于流體物質的仿真和模擬,需要流體理論方面的一般知識。我們這里從基本流體方程入手,詳細解釋如何實現流體仿真的每一個具體步驟。 二、摘要 構建類似流體…

C# 實現郵件推送功能

🏆作者:科技、互聯網行業優質創作者 🏆專注領域:.Net技術、軟件架構、人工智能、數字化轉型、DeveloperSharp、微服務、工業互聯網、智能制造 🏆歡迎關注我(Net數字智慧化基地),里面…

詳解pytorch中循環神經網絡(RNN、LSTM、GRU)的維度

詳解pytorch中循環神經網絡(RNN、LSTM、GRU)的維度 RNNtorch.nn.rnn詳解RNN輸入輸出維度 LSTMtorch.nn.LSTM詳解LSTM輸入輸出維度 GRUtorch.nn.GRU詳解GRU輸入輸出維度 三種RNN的示例 首先如果你對RNN、LSTM、GRU不太熟悉,可點擊查看。 RNN …