日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

MySQL 加鎖控制并發的方法

瀏覽:62日期:2023-10-06 11:57:26
前言

鎖總體可以分為樂觀鎖和悲觀鎖,簡單說,樂觀鎖用版本號控制,悲觀鎖用鎖控制。

下面是待會要用來測試的數據

# 添加一個user表CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ’ID’, `name` varchar(255) NOT NULL COMMENT ’姓名’, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;# 插入3條數據INSERT INTO `users` (`id`, `name`)VALUES (1, ’雪山飛豬’), (2, ’chenqionghe’), (3, ’cqh’);

查詢結果如下:

MySQL 加鎖控制并發的方法

一、樂觀鎖

核心原理是增加一個version的字段來控制。舉個場景,我們希望并發更新單行記錄的時候的時候,只有一個進程更新成功,如下

UPDATE users SET name='雪山飛豬' WHERE id=3UPDATE users SET name='chenqionghe' WHERE id=3

上面這兩個sql最終都會更新成功,且以最后更新結果為主。

解決辦法是添加一個version字段

添加version字段

ALTER TABLE users ADD `version` INT NOT NULL DEFAULT ’0’

解決辦法是添加一個version字段,每個更新時where條件都加上它,并且也更新它

UPDATE users SET name='雪山飛豬',version=version+1 WHERE id=3 AND version=0UPDATE users SET name='chenqionghe',version=version+1 WHERE id=3 AND version=0

這次變成了只會更新成功一次,誰先搶到這條記錄以誰為主,因為當前一個進程更新成功后版本號已經變化了,第二個進程找不到這條記錄了。這就是最簡單的CAS機制。

二、悲觀鎖

其實類似Go語言里的Mutex和RwMutex讀鎖

讀鎖

也叫共享鎖或S鎖,當給數據表加上共享鎖的時候,表就變成了只讀模式。我們可以鎖全表,也可以鎖全表或部分行,如下

全表鎖(LOCK TABLE 表 READ)

語法如下

LOCK TABLE 表 READUNLOCK TABLE;

我們來測試一個,第一個進程執行

LOCK TABLE users READ;

MySQL 加鎖控制并發的方法

第二個進程執行正常讀

SELECT * FROM users WHERE id=1;

MySQL 加鎖控制并發的方法

可以正常查詢。我們再來執行一下更新

UPDATE users SET name='chenqionghe' WHERE id=1

MySQL 加鎖控制并發的方法

出現了等待。

我們給第一個進程解鎖

MySQL 加鎖控制并發的方法

再看第二個進程,已經更新成功

MySQL 加鎖控制并發的方法

行鎖(SELECT ... LOCK IN SHARE MODE)

BEGIN;SELECT * FROM users WHERE id IN (1,2) LOCK IN SHARE MODECOMMIT;

必須配合事務使用,BEIN開始后,鎖定的行,外部只能查詢,不能更新

我們來測試一下,第一個進程執行

BEGIN;SELECT * FROM users WHERE id IN (1,2) LOCK IN SHARE MODE

MySQL 加鎖控制并發的方法

這里鎖定了id為1和2的記錄行。我們第二個進程執行更新

UPDATE users SET name='雪山飛豬' WHERE id=1

又一次出現了等待。好,這時候我們將第一個進程的事務提交

COMMIT;

MySQL 加鎖控制并發的方法

第二個進程更新成功了,如下

寫鎖

也排他鎖、獨占鎖,理解成讀和寫都不行了,語法如下

全表鎖(LOCK TABLE 表 WRITE)

LOCK TABLE users WRITE;

這時候已經鎖定全表,我們再用另一個進程查詢一下id為1的數據

SELECT * FROM users WHERE id=1

MySQL 加鎖控制并發的方法

可以看到,查詢已經發生了等待。我們再將第一個進程解鎖

UNLOCK TABLE

MySQL 加鎖控制并發的方法

這時候,第二個進程立馬查詢成功

MySQL 加鎖控制并發的方法

行鎖(SELECT ... FOR UPDATE)

當我們對數據進行更新的時候(INSERT、DELETE、UPDATE)的時候,數據庫會自動使用排它鎖,防止其他事務操作該數據

BEGIN;SELECT * FROM users WHERE id IN (1,2) LOCK IN SHARE MODECOMMIT;

我們再來測試一下,第一個進程鎖定id為1和2的記錄

BEGIN;SELECT * FROM users WHERE id IN (1,2) FOR UPDATE

注意:這時候事務沒提交

我們先用第二個進程來更新id為3的記錄(未被鎖定)

UPDATE users SET name='chenqionghe' WHERE id=3

MySQL 加鎖控制并發的方法

執行成功了。我們再來更新一個id為1的記錄

UPDATE users SET name='chenqionghe' WHERE id=1

MySQL 加鎖控制并發的方法

發生了等待,說明已經被鎖定了。好,我們提交第一個進程的事務

COMMIT;

再去看第二個進程,已經更新成功

MySQL 加鎖控制并發的方法

簡單說樂觀鎖用version控制,悲觀鎖的表鎖一般用不著,行的讀鎖用LOCK IN SHARE MODE,寫鎖用FRO UPDATE,就是這么簡單!

以上就是MySQL 加鎖控制并發的方法的詳細內容,更多關于MySQL 加鎖控制并發的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲人成高清| 日韩高清中文字幕一区| 精品视频黄色| 日韩欧美字幕| 在线国产一区二区| 蜜桃久久久久久| 日韩va亚洲va欧美va久久| 国产欧美日韩影院| 精品视频国产| 欧美手机在线| 日韩精品视频网站| 精品一区二区三区中文字幕视频| 成人福利av| 亚洲一区二区三区久久久| 国产区精品区| 国产精品一区二区三区av麻| 国产拍在线视频| aⅴ色国产欧美| 日韩av在线播放中文字幕| 麻豆成人在线观看| 欧美肉体xxxx裸体137大胆| 亚洲三区欧美一区国产二区| 国产精品啊v在线| 成人午夜国产| 在线国产日韩| 色乱码一区二区三区网站| 亚洲免费在线| 麻豆国产精品一区二区三区| 欧美日韩国产高清电影| 国产欧美一区二区三区精品观看| 国产精品毛片久久| 免费一区二区视频| 成人午夜网址| 亚洲精品看片| 天堂av在线| 日本va欧美va精品发布| 国产亚洲一区二区手机在线观看| 在线观看一区| 欧美日韩免费观看视频| 欧美影院视频| 免费精品国产| 美女视频免费精品| 蜜桃视频一区二区| 日本在线啊啊| 国产精品天天看天天狠| 免费久久精品| 国产一区二区三区四区| 四虎精品一区二区免费| 久久婷婷激情| 久久精品人人| 日韩欧美久久| 夜夜嗨网站十八久久| 精品成人18| 日韩va亚洲va欧美va久久| 五月精品视频| 日韩电影在线视频| 国产欧美高清视频在线| 中文字幕一区二区三区在线视频| 久久精品官网| 久久精品午夜| 亚洲精品在线国产| 香蕉成人久久| re久久精品视频| 91av亚洲| 老司机免费视频一区二区| 日韩精品免费一区二区夜夜嗨| 欧美福利在线| 日韩久久一区二区三区| 激情久久一区二区| 91国内精品| 日韩国产在线不卡视频| 亚洲在线网站| 国产韩日影视精品| 欧美.日韩.国产.一区.二区| 黄色在线网站噜噜噜| 国产欧美一区二区三区国产幕精品| 石原莉奈在线亚洲二区| 激情婷婷综合| 五月天综合网站| 亚洲高清毛片| 91精品啪在线观看国产18 | 国产一区2区| 国产精品成人自拍| 91亚洲精品视频在线观看| 日韩精品一页| 奇米狠狠一区二区三区| 97成人在线| 日韩激情精品| 国产三级一区| 久久精品国产久精国产爱| 精品三级av在线导航| 国产成人精品一区二区三区视频 | 日韩精品一区第一页| 在线亚洲观看| 在线精品亚洲| 91欧美极品| 美女在线视频一区| 国产精品99一区二区三| 精品国产日韩欧美精品国产欧美日韩一区二区三区| 亚洲精品伊人| 久久国内精品| 精品中文字幕一区二区三区四区| 精品一区91| 天堂8中文在线最新版在线| 91精品在线观看国产| 99视频精品免费观看| 亚洲美女久久| 国产精品一级在线观看| 国产在线不卡一区二区三区| 91tv亚洲精品香蕉国产一区| 免费精品国产| 亚洲精品人人| 欧美1区二区| 91精品国产乱码久久久久久久 | 欧美日韩在线网站| 久久香蕉精品| 国产精品网址| 都市激情国产精品| 婷婷精品进入| 日韩激情啪啪| а√天堂8资源在线| 一区在线免费| 欧美日韩va| 欧美少妇精品| 亚洲精品a级片| 日本一区二区三区中文字幕| 精品三级av| 午夜国产欧美理论在线播放| 日韩精品三级| 色婷婷狠狠五月综合天色拍| 中文视频一区| 国产91在线精品| 国产一级久久| 精品中国亚洲| 亚洲综合精品| 成人午夜网址| 丝袜亚洲精品中文字幕一区| 国产精品美女久久久久久不卡| 久久视频一区| 视频一区日韩| 日韩中文视频| 欧美一区91| 免费毛片在线不卡| 国产精品九九| 日韩亚洲在线| 国产成人免费av一区二区午夜| 香蕉成人久久| 一区二区三区四区日本视频| 亚洲精一区二区三区| 日韩国产一区| 欧美日韩va| 快she精品国产999| 日韩免费一区| 国产精品v一区二区三区| 91久久中文| 国产一区二区三区探花| 亚洲人妖在线| 婷婷综合在线| 98精品久久久久久久| 欧美日韩一区二区三区不卡视频| 欧美日韩激情在线一区二区三区| 久久只有精品| 午夜久久av| 伊人久久大香线蕉av超碰演员| 麻豆国产一区| 日本在线不卡视频| 精品欧美久久| 亚洲美女久久精品| 国产毛片精品久久| 欧美精品一二| 成人小电影网站| 老鸭窝一区二区久久精品| 日韩和欧美一区二区| 亚洲一区区二区| 国产99亚洲| 亚洲永久av| 黄色精品视频| 国产精品1区在线| 日本精品久久| 中文字幕一区日韩精品| 激情婷婷亚洲| 亚洲播播91| 日韩88av| 精品国产一区二区三区性色av| 午夜电影一区| 巨乳诱惑日韩免费av| 亚洲精品极品少妇16p| 99精品视频在线| 日韩视频网站在线观看| 日韩久久视频| 中文av在线全新| 福利片在线一区二区| 欧美国产中文高清| 国产乱子精品一区二区在线观看 | 日韩精品电影一区亚洲| 免费日本视频一区| 蜜桃视频一区二区三区在线观看| 国产精品88久久久久久| 欧美69视频| 激情综合网站|