日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql innodb 排他锁_MySQL 针对 InnoDB 引擎锁的种类:行锁(共享锁和排他锁)和表锁(意向共享锁和意向排他锁)...

發(fā)布時(shí)間:2025/4/5 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql innodb 排他锁_MySQL 针对 InnoDB 引擎锁的种类:行锁(共享锁和排他锁)和表锁(意向共享锁和意向排他锁)... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

InnoDB 鎖快速到底

行鎖:共享鎖(S)、排他鎖(X)

表鎖:意向共享鎖(IS)、意向排他鎖(IX)

下面主要針對(duì) MySQL 中行級(jí)鎖中的共享鎖(S)與排他鎖(X)進(jìn)行分析

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

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

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

說(shuō)了這么多,咱們來(lái)看下以下簡(jiǎn)單的例子:

測(cè)試數(shù)據(jù):

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

(1) 打開(kāi)一個(gè)查詢窗口進(jìn)行查詢會(huì)查詢到一條數(shù)據(jù)

(2)現(xiàn)在打開(kāi)另一個(gè)查詢窗口,對(duì)同一數(shù)據(jù)分別使用排他查和共享查和普通查詢?nèi)N方式查詢

排他查

共享查

普通查詢

結(jié)果是無(wú)論是排他鎖查詢還是共享鎖查詢都會(huì)處于阻塞狀態(tài),因?yàn)?id=1 的數(shù)據(jù)已經(jīng)被加上了排他鎖,此處阻塞是等待排他鎖釋放。但是普通查詢是可以查到數(shù)據(jù)的

2、現(xiàn)在我們對(duì) id=1 的數(shù)據(jù)行?共享查詢

(1)打開(kāi)另一個(gè)查詢窗口,對(duì)同一數(shù)據(jù)分別使用排他查和共享查和普通查詢?nèi)N方式查詢

排他查

共享查

普通查詢

我們看到是可以普通查詢和加共享鎖都是可以查詢到數(shù)據(jù),但加排他鎖就查不到,因?yàn)榕潘i與共享鎖不能作用于同一聚簇索引上(其實(shí)鎖是加在索引上的,而不是那條記錄上,下一篇博客上會(huì)解釋)。

mysql InnoDb 引擎中 update,delete,insert 語(yǔ)句自動(dòng)加排他鎖

首先進(jìn)行 update

此時(shí)進(jìn)行對(duì)正在 update 的索引加共享鎖進(jìn)行查詢

會(huì)發(fā)現(xiàn)此時(shí)共享查詢處于阻塞,等待排它鎖的釋放。

接下來(lái)看一下使用普通查詢

但是用普通查詢能查到數(shù)據(jù),因?yàn)闆](méi)用上鎖機(jī)制不與排他鎖互斥,但查到的數(shù)據(jù)是修改數(shù)據(jù)之前的老數(shù)據(jù)。

然后我們提交數(shù)據(jù),釋放排他鎖看下修改后的數(shù)據(jù),此時(shí)可用排他查,共享查和普通查詢, 因?yàn)槭聞?wù)提交后排他鎖釋放。下面就簡(jiǎn)單演示一下普通查詢:

1、先提交數(shù)據(jù)

2、再進(jìn)行普通查詢

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

以上為我對(duì) mysql 中共享鎖與排他鎖的個(gè)人理解。

總結(jié)

以上是生活随笔為你收集整理的mysql innodb 排他锁_MySQL 针对 InnoDB 引擎锁的种类:行锁(共享锁和排他锁)和表锁(意向共享锁和意向排他锁)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。