千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > mysql有排他鎖為什么還需要共享鎖呢?

mysql有排他鎖為什么還需要共享鎖呢?

來源:千鋒教育
發(fā)布人:xqq
時間: 2023-10-14 01:15:03 1697217303

一、mysql有排他鎖為什么還需要共享鎖

共享鎖又稱為讀鎖,簡稱S鎖,顧名思義,共享鎖就是多個事務對于同一數(shù)據(jù)可以共享一把鎖,都能訪問到最新數(shù)據(jù)。如果只有一個事務拿到了共享鎖,則該事務可以對數(shù)據(jù)進行 UPDATE DETELE 等操作。如果有多個事務拿到了共享鎖,則所有事務都不能對數(shù)據(jù)進行 UPDATE DETELE 等操作。

排他鎖又稱為寫鎖,簡稱X鎖,顧名思義,排它鎖不能與其它鎖并存,而且只有一個事務能拿到某一數(shù)據(jù)行的排它鎖,其余事務不能再獲取該數(shù)據(jù)行的所有鎖。

只有一個事務能獲取該數(shù)據(jù)的排它鎖;一旦有一個事務獲取了該數(shù)據(jù)的排它鎖之后,其余事務對于該數(shù)據(jù)的操作將會被阻塞,直至鎖釋放。

因為排它鎖只允許一個事務獲取,所以如果是業(yè)務繁忙的情況下,一旦有某個業(yè)務不能及時的釋放鎖,則會導致其它事務的鎖等待、鎖等待超時、死鎖等問題;

雖然共享鎖可以給多個事務共享,但一旦有多個事務同時擁有共享鎖,則所有事務都不能對數(shù)據(jù)進行 UPDATE DETELE 等操作,也會導致其它事務的鎖等待、鎖等待超時、死鎖等問題;

都會影響數(shù)據(jù)庫的并發(fā)能力。

延伸閱讀:

二、并發(fā)鎖

在一定條件下,MyISAM也支持查詢和操作的并發(fā)進行。
MyISAM存儲引擎有一個系統(tǒng)變量concurrent_insert,專門用以控制其并發(fā)插入的行為,其值分別可以為0、1或2。
當concurrent_insert設置為0時,不允許并發(fā)插入。
當concurrent_insert設置為1時,如果MyISAM允許在一個讀表的同時,另一個進程從表尾插入記錄。這也是MySQL的默認設置。
當concurrent_insert設置為2時,無論MyISAM表中有沒有空洞,都允許在表尾插入記錄,都允許在表尾并發(fā)插入記錄。
可以利用MyISAM存儲引擎的并發(fā)插入特性,來解決應用中對同一表查詢和插入鎖爭用。例如,將concurrent_insert系統(tǒng)變量為2,總是允許并發(fā)插入;同時,通過定期在系統(tǒng)空閑時段執(zhí)行OPTIONMIZE TABLE語句來整理空間碎片,收到因刪除記錄而產(chǎn)生的中間空洞。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內(nèi)將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT