中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql的共享鎖與排他鎖的區別和使用方法

發布時間:2020-05-20 14:45:06 來源:億速云 閱讀:338 作者:鴿子 欄目:MySQL數據庫

mysql鎖機制分為表級鎖和行級鎖,本文就和大家分享一下我對mysql中行級鎖中的共享鎖與排他鎖進行分享交流。

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

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

對于共享鎖大家可能很好理解,就是多個事務只能讀數據不能改數據,對于排他鎖大家的理解可能就有些差別,我當初就犯了一個錯誤,以為排他鎖鎖住一行數據后,其他事務就不能讀取和修改該行數據,其實不是這樣的。排他鎖指的是一個事務在一行數據加上排他鎖后,其他事務不能再在其上加其他的鎖。mysql InnoDB引擎默認的修改數據語句,update,delete,insert都會自動給涉及到的數據加上排他鎖,select語句默認不會加任何鎖類型,如果加排他鎖可以使用select ...for update語句,加共享鎖可以使用select ... lock in share mode語句。所以加過排他鎖的數據行在其他事務種是不能修改數據的,也不能通過for update和lock in share mode鎖的方式查詢數據,但可以直接通過select ...from...查詢數據,因為普通查詢沒有任何鎖機制。

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

我們有如下測試數據

mysql的共享鎖與排他鎖的區別和使用方法

現在我們對id=1的數據行排他查詢,這里會使用begin開啟事務,而不會看見我關閉事務,這樣做是用來測試,因為提交事務或回滾事務就會釋放鎖。

打開一個查詢窗口

mysql的共享鎖與排他鎖的區別和使用方法

會查詢到一條數據,現在打開另一個查詢窗口,對同一數據分別使用排他查和共享鎖查詢兩種方式查詢

排他查

mysql的共享鎖與排他鎖的區別和使用方法

共享查

mysql的共享鎖與排他鎖的區別和使用方法

我們看到開了排他鎖查詢和共享鎖查詢都會處于阻塞狀態,因為id=1的數據已經被加上了排他鎖,此處阻塞是等待排他鎖釋放。

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

mysql的共享鎖與排他鎖的區別和使用方法

我們看到是可以查詢到數據的。

我們再看一下一個事務獲取了共享鎖,在其他查詢中也只能加共享鎖或不加鎖。

mysql的共享鎖與排他鎖的區別和使用方法

mysql的共享鎖與排他鎖的區別和使用方法

mysql的共享鎖與排他鎖的區別和使用方法

我們看到是可以查詢數據的,但加排他鎖就查不到,因為排他鎖與共享鎖不能存在同一數據上。

最后我們驗證下上面說的mysql InnoDb引擎中update,delete,insert語句自動加排他鎖的問題,

mysql的共享鎖與排他鎖的區別和使用方法

此時共享查詢處于阻塞,等待排它鎖的釋放,但是用普通查詢能查到數據,因為沒用上鎖機制不與排他鎖互斥,但查到的數據是修改數據之前的老數據。

mysql的共享鎖與排他鎖的區別和使用方法

然后我們提交數據,釋放排他鎖看下修改后的數據,此時可用排他查,共享查和普通查詢, 因為事務提交后該行數據釋放排他鎖,下面就只顯示普通查詢,其他的同學們自己去驗證。

mysql的共享鎖與排他鎖的區別和使用方法

可以看到結果與預期的一樣。

以上就是mysql的共享鎖與排他鎖詳解的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德惠市| 武邑县| 宁陵县| 桦川县| 东乌| 洪洞县| 吉安市| 玉林市| 陆丰市| 溧阳市| 平罗县| 霍城县| 灌阳县| 张家港市| 福海县| 潍坊市| 莫力| 宿松县| 麻江县| 托克托县| 来安县| 韶关市| 会理县| 东乡族自治县| 平和县| 高淳县| 石家庄市| 讷河市| 红桥区| 阿坝| 台中市| 成都市| 嘉荫县| 蒙自县| 信丰县| 永昌县| 比如县| 海盐县| 黔西县| 高尔夫| 东阳市|