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

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

MySQL 加鎖控制并發的方法

瀏覽:54日期: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久久,三上悠亚国产精品一区二区三区
国产一二在线播放| 欧美sss在线视频| 蜜桃伊人久久| 亚洲激情婷婷| 视频一区中文字幕| 中文无码久久精品| 中文字幕成人| 久久国产精品亚洲77777| 在线免费观看亚洲| 日韩av一区二区在线影视| 亚洲精品裸体| 日本高清久久| 国产精品乱战久久久| 国内不卡的一区二区三区中文字幕| 鲁大师精品99久久久| 久久伊人久久| 国产高潮在线| 美女亚洲一区| 免费观看久久久4p| 久久狠狠亚洲综合| 日本久久精品| 国产真实久久| 亚洲一区二区动漫| 日韩精品高清不卡| 国产黄色一区| 久久久久国产| 美国三级日本三级久久99| 奇米777国产一区国产二区| 精品久久久久中文字幕小说| 欧美日一区二区| 日韩专区视频网站| 黄色网一区二区| 在线亚洲国产精品网站| 91亚洲精品在看在线观看高清| 久久精品国产久精国产| а√天堂8资源中文在线| 久久aⅴ国产紧身牛仔裤| 欧美久久亚洲| 91tv亚洲精品香蕉国产一区| 日韩影院在线观看| 另类小说一区二区三区| 欧美a级片一区| 日韩av字幕| 91亚洲自偷观看高清| 久热re这里精品视频在线6| 国产精品丝袜在线播放| 91精品久久久久久久久久不卡| 免费在线看一区| 国产一区二区三区亚洲综合| 99热精品在线观看| 开心激情综合| 日韩中文字幕1| 国产精品sm| 99成人在线| 美女久久99| 免费观看日韩电影| 92国产精品| 日韩福利视频网| 久久久夜夜夜| 欧美日韩亚洲一区在线观看| 中文一区一区三区高中清不卡免费| 国产农村妇女精品一二区| 久久香蕉精品香蕉| 亚洲三级国产| 久久亚洲国产| 国产精品v日韩精品v欧美精品网站| 亚洲福利久久| 国产美女精品视频免费播放软件| 九九久久电影| 你懂的亚洲视频| 国产一区91| 久久青青视频| 国产亚洲精品精品国产亚洲综合| 欧美精品自拍| 成人小电影网站| 国产欧美另类| 亚洲一二三区视频| 欧美 日韩 国产精品免费观看| 国产精品对白久久久久粗| 玖玖玖国产精品| 日本少妇一区| 国语精品一区| 日韩精品午夜视频| 一区在线免费| 成人日韩精品| 国产中文欧美日韩在线| 日韩欧乱色一区二区三区在线| 免费久久精品| 欧美freesex黑人又粗又大| 国产精品欧美大片| 亚洲日本免费电影| 午夜欧美理论片| 久久一区二区三区喷水| 在线精品亚洲欧美日韩国产| 国产精品66| 日本视频在线一区| 综合激情网...| 国户精品久久久久久久久久久不卡| 国产一区二区三区久久久久久久久| 日本不卡视频在线| 一区二区亚洲视频| 免费日韩av片| 午夜视频精品| 在线日韩一区| 99热精品久久| 久久久久国产精品一区二区| 精品国产第一福利网站| 国产成人免费| 国产一区二区三区四区二区| 欧美国产中文高清| 国产乱码精品| 日韩高清一区二区| 模特精品在线| 亚洲欧美日韩精品一区二区| 91久久久久| 99亚洲视频| 伊人久久亚洲影院| 国产精品免费看| 性色av一区二区怡红| 鲁大师成人一区二区三区| 99成人在线| 国产精品免费看| 午夜在线精品| 免费视频一区二区| 亚洲2区在线| 日韩va亚洲va欧美va久久| 欧美亚洲三区| 国产精品片aa在线观看 | 色综合www| 精品国产乱码| 国产白浆在线免费观看| 日韩黄色大片| 精品一区毛片| 丝袜国产日韩另类美女| 亚洲欧洲美洲国产香蕉| 日韩激情精品| 国产精品777777在线播放| 美女性感视频久久| 高清一区二区三区| 秋霞国产精品| 欧美日韩日本国产亚洲在线 | 日韩不卡一二三区| 国产精品乱战久久久| 精品视频久久| 久久久久久黄| 国产亚洲一区在线| 日韩毛片一区| 久久久久亚洲精品中文字幕| 中文字幕在线视频久| 今天的高清视频免费播放成人| 免费国产自久久久久三四区久久| 久久国产高清| 国产欧美日韩在线观看视频| 国产精品chinese| 蜜桃视频在线网站| 亚洲一区观看| 国产伦精品一区二区三区在线播放| 免费欧美一区| 日韩不卡一二三区| av资源中文在线| 亚洲一区观看| 国产精品香蕉| 播放一区二区| 亚洲人成在线影院| 精品日本视频| 久久天堂精品| 亚洲一区二区三区四区五区午夜 | 精品深夜福利视频| 欧美日中文字幕| 亚洲精品一二| 精品国产精品国产偷麻豆| 午夜国产一区二区| 日韩精选在线| 91亚洲国产高清| 亚洲综合电影一区二区三区| 久久精品72免费观看| | 国产探花一区| 欧美亚洲国产一区| 欧美午夜三级| 婷婷精品视频| 国产亚洲欧美日韩精品一区二区三区| 欧美精品日日操| 日本欧美在线| 99tv成人| 欧美日韩亚洲一区二区三区在线 | 亚洲免费精品| 国产精品多人| 亚洲少妇一区| 国产精品白丝一区二区三区| 极品日韩av| 久久99蜜桃| 视频精品一区二区| 色综合五月天| 啪啪亚洲精品| 激情综合网站| 精品视频自拍| 日韩**一区毛片| 国内精品99| 精品久久视频|