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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

mysql 的独占锁和排它锁_MySQL的排它锁与共享锁

發布時間:2024/9/27 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 的独占锁和排它锁_MySQL的排它锁与共享锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

博主最近在復習 MySQL 和 Redis 的知識。順便就記錄一下這個 MySQL 排它鎖和共享鎖。

本文以下內容基于數據表(test 表):+----+-------+

|?id?|?name??|

+----+-------+

|?1??|?111???|

+----+-------+

|?2??|?222???|

+----+-------+

共享鎖

共享鎖也叫讀鎖,就是在讀取數據的時候加上共享鎖,如果不提交事務就會一直鎖行阻塞。

執行 SQL :BEGIN;

SELECT?`id`,`name`?FROM?test?WHERE?id?=?1?LOCK?IN?SHARE?MODE;

正常返回了數據記錄:

此時打開另外一個數據庫管理軟件(新進程)訪問同一個數據庫繼續執行排它鎖 SQL:BEGIN;

SELECT?`id`,`name`?FROM?test?WHERE?id?=?1?FOR?UPDATE;

因為剛才執行的 SQL 加了共享鎖,所以此時新進程使用排它鎖查詢同一條數據會因為阻塞而超時。

而如果使用正常的查詢或者共享鎖繼續查詢:SELECT?`id`,`name`?FROM?test?WHERE?id?=?1;

#?或者:

SELECT?`id`,`name`?FROM?test?WHERE?id?=?1?LOCK?IN?SHARE?MODE;

是不會被阻塞的,可以正常返回數據。

排它鎖

排它鎖是獨占鎖,執行之后使用共享鎖查詢被排它鎖鎖住的數據記錄也無法查詢。

例如 A 進程中查詢:BEGIN;

SELECT?`id`,`name`?FROM?test?WHERE?id?=?1?FOR?UPDATE;

在 B 進程中執行:BEGIN;

SELECT?`id`,`name`?FROM?test?WHERE?id?=?1?LOCK?IN?SHARE?MODE;

或者執行:BEGIN;

SELECT?`id`,`name`?FROM?test?WHERE?id?=?1?FOR?UPDATE;

都是無法查詢到結果,直到 A 進程提交事務后才會獲取到結果。

自帶排它鎖

其實 innoDB 執行 UPDATE 是帶有排它鎖的,所以在事務中執行 UPDATE 但是不提交事務的時候,其他進程使用排它鎖或者共享鎖是無法查詢的。

A 進程執行:BEGIN;

UPDATE?test?SET?NAME?=?333?WHERE?id?=?1;

B 進程執行:BEGIN;

SELECT?`id`,`name`?FROM?test?WHERE?id?=?1?FOR?UPDATE;

COMMIT;

就會遇到阻塞而無法查詢數據。

樂觀鎖

上面寫的共享鎖和排它鎖其實都是屬于悲觀鎖,而樂觀鎖其實更適合高并發。

假如 test 表中含有的字段和數據:+----+-------+---------+

|?id?|?stock?|?version?|

+----+-------+---------+

|?1??|?100???|?1???????|

|?2??|?200???|?2???????|

+----+-------+---------+

查詢數據:SELECT?`id`,`name`?FROM?test?WHERE?id?=?1

返回的結果:+----+-------+---------+

|?id?|?stock?|?version?|

+----+-------+---------+

|?1??|?100???|?1???????|

+----+-------+---------+

此時需要減少該記錄的庫存,使用樂觀鎖可以這樣執行:UPDATE?test?SET?stock?=?stock?-?1?WHERE?id?=?1?AND?stock?>?0?AND?version?=?1?AND?stock?=?100;

因為在 where 條件中加入了查詢到的結果返回的參數,并且如果庫存 stock 為 0 的時候是無法執行成功的,所以一般情況下這樣執行之后超賣就不會出現。

共享鎖和排它鎖的區別

共享鎖是可以大家一起讀的,就是在 A 進程使用共享鎖查詢了數據,B 進行也可以繼續查詢,但是如果 B 進程進行修改也會進行阻塞。 如果此時新的進程使用排它鎖查詢被共享鎖的數據是會被阻塞的。

排它鎖是獨占鎖,當查詢的時候 SELECT ... FOR UPDATE 其他進程就不能使用排它鎖或者共享鎖進行查詢該數據了(增刪改查都無法進行)。

注意

使用鎖一定要將數據引擎設置為 innoDB, 因為 Myisam 引擎不支持事務。

以上內容是博主對鎖的個人理解,如有錯誤可以評論指正。

總結

以上是生活随笔為你收集整理的mysql 的独占锁和排它锁_MySQL的排它锁与共享锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产高清二区 | 亚州男人天堂 | 欧美精品首页 | 日韩一级免费毛片 | 少妇高潮一区二区三区四区 | 丰满护士巨好爽好大乳 | 综合久久久久久久久久久 | 国产成人三级在线观看视频 | 美脚の诱脚舐め脚视频播放 | 久久精品99久久久 | 久久久99国产精品免费 | 99ri在线 | 欧美一区二区三区婷婷月色 | 女人夜夜春 | 国产日韩一级片 | 韩国女主播av | 草莓视频在线观看入口w | 精品国偷自产国产一区 | 91传媒在线免费观看 | 日本少妇中文字幕 | av中文字幕一区二区三区 | 黄色免费高清 | 朝桐光av一区二区三区 | 久久五月天综合 | 四虎黄网| 午夜免费在线观看 | 亚洲一区小说 | 最新国产中文字幕 | 无码人妻精品一区二区三区温州 | 三级免费网站 | 美女扒开内裤让男人桶 | 国产福利小视频在线观看 | 国产老头老太作爱视频 | 伊人免费在线观看高清版 | 午夜一二三 | 小香蕉影院 | 欧美激情欧美激情在线五月 | 久久93 | 久久人人爽人人爽人人片av免费 | 欧美三级黄色 | 日韩一区二区视频在线播放 | 国产一区二区三区视频免费在线观看 | 欧美精品一区二区在线观看 | 无遮挡无掩盖网站 | 久久久久久av无码免费网站 | 欧美视频网址 | jizzzxxxx| 国产精品久久久久影院色老大 | 亚洲制服丝袜在线播放 | 日本少妇xxxx | 五月天在线播放 | 日本护士毛茸茸 | 香蕉久久一区二区三区 | 粉嫩av一区二区三区四区五区 | 老师用丝袜脚帮我脚交 | 国产毛片毛片毛片毛片 | 免费在线成人av | 伊人久久精品一区二区三区 | 女人脱裤子让男人捅 | 婷婷在线免费 | 一级黄色大毛片 | 夜夜操免费视频 | 水多多在线 | 精品国产鲁一鲁一区二区张丽 | 国产精品福利在线观看 | 欧美人日b | 国产一区伦理 | 爱爱二区| 国产美女作爱视频 | 精品福利一区二区三区 | 亚洲色图在线视频 | 久久女女 | 黄色你懂的 | 中文字幕天堂网 | 蜜臀精品一区二区三区 | 日韩欧洲亚洲AV无码精品 | 久久狠狠高潮亚洲精品 | 日韩美女一区 | 97免费在线观看视频 | 吊视频一区二区三区 | 久久亚洲精品中文字幕 | av免费的 | 电影《走路上学》免费 | 久久免费的精品国产v∧ | 夜晚福利视频 | 国产成人无码a区在线观看视频 | 国产福利一区在线观看 | 天天躁夜夜躁av天天爽 | 三叶草欧洲码在线 | 亚洲av无码国产精品久久 | 亚洲最大的av网站 | 色欧美综合| 自拍视频在线 | 亚洲欧美日韩一区在线观看 | 成人黄色一级 | 日韩激情文学 | 99久久久无码国产精品性色戒 | 人妖性生活视频 | 丝袜一区二区三区 |