濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > mysql共享鎖與排他鎖用法實(shí)例分析

mysql共享鎖與排他鎖用法實(shí)例分析

熱門標(biāo)簽:美國反騷擾電話機(jī)器人 真人語音電話機(jī)器人 400電話可以免費(fèi)申請(qǐng)嗎 電銷卡外呼系統(tǒng)供應(yīng)商 悟空科技電話機(jī)器人 銅陵防封電銷卡 怎么在地圖標(biāo)注位置生成圖片 騰訊地圖標(biāo)注提升 福建外呼系統(tǒng)定制化

本文實(shí)例講述了mysql共享鎖與排他鎖用法。分享給大家供大家參考,具體如下:

mysql鎖機(jī)制分為表級(jí)鎖和行級(jí)鎖,本文就和大家分享一下我對(duì)mysql中行級(jí)鎖中的共享鎖與排他鎖進(jìn)行分享交流。

共享鎖又稱為讀鎖,簡稱S鎖,顧名思義,共享鎖就是多個(gè)事務(wù)對(duì)于同一數(shù)據(jù)可以共享一把鎖,都能訪問到數(shù)據(jù),但是只能讀不能修改。

排他鎖又稱為寫鎖,簡稱X鎖,顧名思義,排他鎖就是不能與其他所并存,如一個(gè)事務(wù)獲取了一個(gè)數(shù)據(jù)行的排他鎖,其他事務(wù)就不能再獲取該行的其他鎖,包括共享鎖和排他鎖,但是獲取排他鎖的事務(wù)是可以對(duì)數(shù)據(jù)就行讀取和修改。

對(duì)于共享鎖大家可能很好理解,就是多個(gè)事務(wù)只能讀數(shù)據(jù)不能改數(shù)據(jù),對(duì)于排他鎖大家的理解可能就有些差別,我當(dāng)初就犯了一個(gè)錯(cuò)誤,以為排他鎖鎖住一行 數(shù)據(jù)后,其他事務(wù)就不能讀取和修改該行數(shù)據(jù),其實(shí)不是這樣的。排他鎖指的是一個(gè)事務(wù)在一行數(shù)據(jù)加上排他鎖后,其他事務(wù)不能再在其上加其他的鎖。mysql InnoDB引擎默認(rèn)的修改數(shù)據(jù)語句,update,delete,insert都會(huì)自動(dòng)給涉及到的數(shù)據(jù)加上排他鎖,select語句默認(rèn)不會(huì)加任何鎖類 型,如果加排他鎖可以使用select ...for update語句,加共享鎖可以使用select ... lock in share mode語句。所以加過排他鎖的數(shù)據(jù)行在其他事務(wù)種是不能修改數(shù)據(jù)的,也不能通過for update和lock in share mode鎖的方式查詢數(shù)據(jù),但可以直接通過select ...from...查詢數(shù)據(jù),因?yàn)槠胀ú樵儧]有任何鎖機(jī)制。

說了這么多,咱們來看下以下簡單的例子:

我們有如下測(cè)試數(shù)據(jù)

現(xiàn)在我們對(duì)id=1的數(shù)據(jù)行排他查詢,這里會(huì)使用begin開啟事務(wù),而不會(huì)看見我關(guān)閉事務(wù),這樣做是用來測(cè)試,因?yàn)樘峤皇聞?wù)或回滾事務(wù)就會(huì)釋放鎖。

打開一個(gè)查詢窗口

會(huì)查詢到一條數(shù)據(jù),現(xiàn)在打開另一個(gè)查詢窗口,對(duì)同一數(shù)據(jù)分別使用排他查和共享鎖查詢兩種方式查詢

排他查

共享查

我們看到開了排他鎖查詢和共享鎖查詢都會(huì)處于阻塞狀態(tài),因?yàn)閕d=1的數(shù)據(jù)已經(jīng)被加上了排他鎖,此處阻塞是等待排他鎖釋放。

如果我們直接使用以下查詢呢

我們看到是可以查詢到數(shù)據(jù)的。

我們?cè)倏匆幌乱粋€(gè)事務(wù)獲取了共享鎖,在其他查詢中也只能加共享鎖或不加鎖。

我們看到是可以查詢數(shù)據(jù)的,但加排他鎖就查不到,因?yàn)榕潘i與共享鎖不能存在同一數(shù)據(jù)上。

最后我們驗(yàn)證下上面說的mysql InnoDb引擎中update,delete,insert語句自動(dòng)加排他鎖的問題,

此時(shí)共享查詢處于阻塞,等待排它鎖的釋放,但是用普通查詢能查到數(shù)據(jù),因?yàn)闆]用上鎖機(jī)制不與排他鎖互斥,但查到的數(shù)據(jù)是修改數(shù)據(jù)之前的老數(shù)據(jù)。

然后我們提交數(shù)據(jù),釋放排他鎖看下修改后的數(shù)據(jù),此時(shí)可用排他查,共享查和普通查詢, 因?yàn)槭聞?wù)提交后該行數(shù)據(jù)釋放排他鎖,下面就只顯示普通查詢,其他的同學(xué)們自己去驗(yàn)證。

可以看到結(jié)果與預(yù)期的一樣。

以上為我對(duì)mysql中共享鎖與排他鎖的個(gè)人理解,有不正確的地方還希望各位指正。

更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總》、《MySQL存儲(chǔ)過程技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》及《MySQL事務(wù)操作技巧匯總》

希望本文所述對(duì)大家MySQL數(shù)據(jù)庫計(jì)有所幫助。

您可能感興趣的文章:
  • 關(guān)于MySQL死鎖問題的深入分析
  • MySql 索引、鎖、事務(wù)知識(shí)點(diǎn)小結(jié)
  • MySQL全局鎖和表鎖的深入理解
  • MySQL中的行級(jí)鎖定示例詳解
  • MySQL鎖的知識(shí)點(diǎn)總結(jié)

標(biāo)簽:武威 湖南 臨汾 云浮 烏海 湖北 聊城 白銀

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql共享鎖與排他鎖用法實(shí)例分析》,本文關(guān)鍵詞  mysql,共享,鎖,與,排他,用法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql共享鎖與排他鎖用法實(shí)例分析》相關(guān)的同類信息!
  • 本頁收集關(guān)于mysql共享鎖與排他鎖用法實(shí)例分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    清河县| 常德市| 鹤壁市| 石嘴山市| 绍兴县| 濮阳县| 卢湾区| 宁波市| 探索| 孝昌县| 岳阳市| 龙口市| 鄂伦春自治旗| 通河县| 潞西市| 福安市| 昭平县| 嘉祥县| 汶川县| 葫芦岛市| 遂宁市| 策勒县| 白河县| 临洮县| 个旧市| 景洪市| 麻城市| 清丰县| 黑山县| 平凉市| 贡觉县| 武功县| 宜丰县| 三明市| 囊谦县| 山东省| 广德县| 宁夏| 阳泉市| 分宜县| 梅州市|