电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL 加鎖控制并發(fā)的方法

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

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

下面是待會要用來測試的數(shù)據(jù)

# 添加一個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條數(shù)據(jù)INSERT INTO `users` (`id`, `name`)VALUES (1, ’雪山飛豬’), (2, ’chenqionghe’), (3, ’cqh’);

查詢結(jié)果如下:

MySQL 加鎖控制并發(fā)的方法

一、樂觀鎖

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

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

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

解決辦法是添加一個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

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

二、悲觀鎖

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

讀鎖

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

全表鎖(LOCK TABLE 表 READ)

語法如下

LOCK TABLE 表 READUNLOCK TABLE;

我們來測試一個,第一個進程執(zhí)行

LOCK TABLE users READ;

MySQL 加鎖控制并發(fā)的方法

第二個進程執(zhí)行正常讀

SELECT * FROM users WHERE id=1;

MySQL 加鎖控制并發(fā)的方法

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

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

MySQL 加鎖控制并發(fā)的方法

出現(xiàn)了等待。

我們給第一個進程解鎖

MySQL 加鎖控制并發(fā)的方法

再看第二個進程,已經(jīng)更新成功

MySQL 加鎖控制并發(fā)的方法

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

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

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

我們來測試一下,第一個進程執(zhí)行

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

MySQL 加鎖控制并發(fā)的方法

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

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

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

COMMIT;

MySQL 加鎖控制并發(fā)的方法

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

寫鎖

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

全表鎖(LOCK TABLE 表 WRITE)

LOCK TABLE users WRITE;

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

SELECT * FROM users WHERE id=1

MySQL 加鎖控制并發(fā)的方法

可以看到,查詢已經(jīng)發(fā)生了等待。我們再將第一個進程解鎖

UNLOCK TABLE

MySQL 加鎖控制并發(fā)的方法

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

MySQL 加鎖控制并發(fā)的方法

行鎖(SELECT ... FOR UPDATE)

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

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 加鎖控制并發(fā)的方法

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

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

MySQL 加鎖控制并發(fā)的方法

發(fā)生了等待,說明已經(jīng)被鎖定了。好,我們提交第一個進程的事務

COMMIT;

再去看第二個進程,已經(jīng)更新成功

MySQL 加鎖控制并發(fā)的方法

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

以上就是MySQL 加鎖控制并發(fā)的方法的詳細內(nèi)容,更多關(guān)于MySQL 加鎖控制并發(fā)的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

相關(guān)文章:
主站蜘蛛池模板: 注浆压力变送器-高温熔体传感器-矿用压力传感器|ZHYQ朝辉 | 户外-组合-幼儿园-不锈钢-儿童-滑滑梯-床-玩具-淘气堡-厂家-价格 | 银川美容培训-美睫美甲培训-彩妆纹绣培训-新娘化妆-学化妆-宁夏倍莱妮职业技能培训学校有限公司 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 注塑_注塑加工_注塑模具_塑胶模具_注塑加工厂家_深圳环科 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 | 置顶式搅拌器-优莱博化学防爆冰箱-磁驱搅拌器-天津市布鲁克科技有限公司 | 精密钢管,冷拔精密无缝钢管,精密钢管厂,精密钢管制造厂家,精密钢管生产厂家,山东精密钢管厂家 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 探伤仪,漆膜厚度测试仪,轮胎花纹深度尺厂家-淄博创宇电子 | 膜结构_ETFE膜结构_膜结构厂家_膜结构设计-深圳市烨兴智能空间技术有限公司 | 青岛成人高考_山东成考报名网 | 单机除尘器 骨架-脉冲除尘器设备生产厂家-润天环保设备 | 公交驾校-北京公交驾校欢迎您! 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 | 无负压供水设备,消防稳压供水设备-淄博创辉供水设备有限公司 | 至顶网| 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 高考志愿规划师_高考规划师_高考培训师_高报师_升学规划师_高考志愿规划师培训认证机构「向阳生涯」 | 商秀—企业短视频代运营_抖音企业号托管 | 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 银川美容培训-美睫美甲培训-彩妆纹绣培训-新娘化妆-学化妆-宁夏倍莱妮职业技能培训学校有限公司 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 郑州水质检测中心_井水检测_河南废气检测_河南中环嘉创检测 | 飞象网 - 通信人每天必上的网站| 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 | 空气净化器租赁,空气净化器出租,全国直租_奥司汀净化器租赁 | 影合社-影视人的内容合作平台| 齿式联轴器-弹性联轴器-联轴器厂家-江苏诺兴传动联轴器制造有限公司 | 活性氧化铝|无烟煤滤料|活性氧化铝厂家|锰砂滤料厂家-河南新泰净水材料有限公司 | 无锡市珂妮日用化妆品有限公司|珂妮日化官网|洗手液厂家 | 聚合甘油__盐城市飞龙油脂有限公司| 地脚螺栓_材质_标准-永年县德联地脚螺栓厂家 | 渣土车电机,太阳能跟踪器电机,蜗轮蜗杆减速电机厂家-淄博传强电机 | 利浦顿蒸汽发生器厂家-电蒸汽发生器/燃气蒸汽发生器_湖北利浦顿热能科技有限公司官网 | 沥青灌缝机_路面灌缝机_道路灌缝机_沥青灌缝机厂家_济宁萨奥机械有限公司 | 托利多电子平台秤-高精度接线盒-托利多高精度电子秤|百科 | 反渗透阻垢剂-缓蚀阻垢剂厂家-循环水处理药剂-山东鲁东环保科技有限公司 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 包塑丝_高铁绑丝_地暖绑丝_涂塑丝_塑料皮铁丝_河北创筹金属丝网制品有限公司 |