自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

數(shù)據(jù)庫(kù) MySQL
在MySQL的InnoDB引擎中,支持多種鎖級(jí)別,其中包括行級(jí)鎖和表級(jí)鎖,而共享鎖,又被稱(chēng)為讀鎖,是由讀取操作所創(chuàng)建的一種鎖。

共享鎖

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

一旦事務(wù)T對(duì)數(shù)據(jù)A加上共享鎖,其他事務(wù)只能對(duì)A再加共享鎖,而無(wú)法加排他鎖。獲得共享鎖的事務(wù)僅可讀取數(shù)據(jù),不可修改數(shù)據(jù)。

SELECT ... LOCK IN SHARE MODE;

在查詢語(yǔ)句后增加LOCK IN SHARE MODE,MySQL會(huì)對(duì)查詢結(jié)果中的每一行都加上共享鎖。當(dāng)沒(méi)有其他線程對(duì)查詢結(jié)果集中的任何一行使用排他鎖時(shí),可以成功申請(qǐng)共享鎖;否則會(huì)被阻塞。其他線程也可以讀取已被共享鎖保護(hù)的表,且這些線程讀取的是同一版本的數(shù)據(jù)。

排他鎖

排他鎖又稱(chēng)為寫(xiě)鎖。如果事務(wù)T對(duì)數(shù)據(jù)A加上排他鎖,則其他事務(wù)無(wú)法對(duì)A加任何類(lèi)型的鎖。獲得排他鎖的事務(wù)既能讀取數(shù)據(jù),又能修改數(shù)據(jù)。

SELECT ... FOR UPDATE;

在查詢語(yǔ)句后增加FOR UPDATE,MySQL會(huì)對(duì)查詢結(jié)果中的每一行記錄都加上排他鎖。只有在沒(méi)有其他線程對(duì)查詢結(jié)果集中的任何一行使用排他鎖時(shí),才能成功申請(qǐng)排他鎖;否則會(huì)被阻塞。

意向鎖

在MySQL的InnoDB引擎中,支持多種鎖級(jí)別,其中包括行級(jí)鎖和表級(jí)鎖。當(dāng)多個(gè)事務(wù)需要訪問(wèn)同一共享資源時(shí),如果每個(gè)事務(wù)都直接請(qǐng)求獲取鎖,可能會(huì)發(fā)生相互阻塞的情況,甚至可能導(dǎo)致死鎖的產(chǎn)生。

舉個(gè)例子:

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

為了解決這個(gè)問(wèn)題,需要讓事務(wù)B在嘗試對(duì)Table1增加表級(jí)鎖之前,先判斷是否有其他事務(wù)已經(jīng)對(duì)該表的某行加了行級(jí)鎖。但是,事務(wù)B顯然不能遍歷整個(gè)表的數(shù)據(jù)逐條進(jìn)行判斷是否有加鎖。

因此,MySQL引入了意向鎖機(jī)制。意向鎖是數(shù)據(jù)庫(kù)管理系統(tǒng)中用于實(shí)現(xiàn)鎖協(xié)議的一種機(jī)制,旨在處理不同鎖粒度(如行鎖和表鎖)之間的并發(fā)性問(wèn)題。這種機(jī)制幫助解決了不同鎖粒度之間的并發(fā)問(wèn)題,而對(duì)于相同鎖粒度之間的并發(fā)問(wèn)題,可以通過(guò)行級(jí)互斥鎖來(lái)解決。

注意:

  • 意向鎖并非直接用于鎖定資源,而是用于通知其他事務(wù),以避免它們?cè)谫Y源上設(shè)置不兼容的鎖。
  • 意向鎖并非由用戶直接請(qǐng)求,而是由MySQL管理的。

當(dāng)一個(gè)事務(wù)請(qǐng)求獲取行級(jí)鎖或表級(jí)鎖時(shí),MySQL會(huì)自動(dòng)獲取相應(yīng)表的意向鎖。這樣,其他事務(wù)在請(qǐng)求獲取表鎖時(shí),就可以首先基于這個(gè)意向鎖來(lái)發(fā)現(xiàn)是否已經(jīng)有其他事務(wù)加過(guò)鎖,并根據(jù)該鎖的類(lèi)型(意向共享鎖/意向排他鎖)來(lái)判斷自己是否可以獲取鎖。通過(guò)這種方式,可以在不阻塞其他事務(wù)的情況下,為當(dāng)前事務(wù)鎖定資源。意向鎖有兩種類(lèi)型:意向共享鎖和意向排他鎖。

  • 意向共享鎖:表示事務(wù)打算在資源上設(shè)置共享鎖(讀鎖)。通常用于表明事務(wù)計(jì)劃讀取資源,并希望在讀取時(shí)不會(huì)有其他事務(wù)設(shè)置排他鎖。
  • 意向排他鎖:表示事務(wù)打算在資源上設(shè)置排他鎖(寫(xiě)鎖)。這表示事務(wù)計(jì)劃修改資源,并不希望有其他事務(wù)同時(shí)設(shè)置共享或排他鎖。

意向鎖是一種表級(jí)鎖,在觸發(fā)意向鎖的事務(wù)提交或回滾后會(huì)被釋放。

責(zé)任編輯:趙寧寧 來(lái)源: 碼上遇見(jiàn)你
相關(guān)推薦

2023-07-03 08:15:46

MySQLInnoDB

2022-11-28 14:27:17

插入意向鎖age

2023-12-28 17:33:25

意向鎖MySQL開(kāi)發(fā)者

2022-04-21 10:39:29

InnoDB意向鎖SQL

2024-10-30 10:38:08

2019-01-04 11:18:35

獨(dú)享鎖共享鎖非公平鎖

2024-03-04 07:37:40

MySQL記錄鎖

2018-07-31 10:10:06

MySQLInnoDB死鎖

2022-07-20 08:06:57

MySQL表鎖Innodb

2019-11-28 16:00:06

重入鎖讀寫(xiě)鎖樂(lè)觀鎖

2024-05-15 09:41:22

樂(lè)觀鎖編程

2017-08-30 18:15:54

MySql

2022-02-21 15:01:45

MySQL共享鎖獨(dú)占鎖

2024-01-29 01:08:01

悲觀鎖遞歸鎖讀寫(xiě)鎖

2021-06-11 16:59:41

MySQLRepeatableRead

2022-12-27 17:40:57

意向鎖MySQLInnoDB

2024-06-06 09:03:37

MySQL數(shù)據(jù)庫(kù)共享鎖

2024-01-29 07:43:42

Java獨(dú)占鎖共享鎖

2025-02-10 09:58:48

2024-11-29 07:38:12

MySQL數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)