MySQL 乐观锁
MySQL 乐观锁
乐观锁认为当前的情况是最好的情况,即每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据
drop table if exists supply_address; -- 创建表 CREATE TABLE if not exists `supply_address` ( `id` int NOT NULL AUTO_INCREMENT, `supply_no` int NOT NULL, `loc_no` int NOT NULL, `loc_name` varchar(192) DEFAULT NULL, `create_by` int DEFAULT NULL, `create_time` datetime(3) DEFAULT NULL, `h_version` int DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
往数据库插入1条记录
insert into supply_address(supply_no, loc_no, loc_name, create_by, create_time, h_version) SELECT 2098,1,'test1',-1,now(),1; -- 得到id=1 的一条记录 select * from supply_address;
现在有A,B两个用户同时修改id =1 的这条记录的name
-- A操作 update supply_address set loc_name = 'test2' where id = 1; -- B操作 update supply_address set loc_name = 'test1' where id = 1;
结果A 更新完发现loc_name变成test1???
使用乐观锁解决这种数据不一致问题,每个人更新都要带上当前数据的版本号(h_version)
-- A操作 update supply_address set loc_name = 'test2', h_version = h_version + 1 where id = 1 and h_version = 1; -- B操作 update supply_address set loc_name = 'test1', h_version = h_version + 1 where id = 1 and h_version = 1;
此时B操作失败,由于B使用了旧的版本去更新数据,而A操作成功!
作者:努力为明天
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)