千家信息网

悲观锁与乐观锁怎么在Mysql中使用

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,悲观锁与乐观锁怎么在Mysql中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。悲观锁悲观锁,认为数据是悲观的。当我们查询数据的时
千家信息网最后更新 2025年02月05日悲观锁与乐观锁怎么在Mysql中使用

悲观锁与乐观锁怎么在Mysql中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

悲观锁

悲观锁,认为数据是悲观的。当我们查询数据的时候加上锁。防止其他线程篡改,直到对方拿到锁,才能修改。

比如,有如下的表。status=1表示可以下单,status=2表示不可以下订单。假如在并发的过程中有两个用户同时查到status=1,那么从逻辑上来说都可以去新增订单,但是会造成商品超卖。

如下例子

CREATE TABLE `goods` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `status` tinyint(4) DEFAULT NULL, `version` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4INSERT INTO demo.goods (id, name, status, version) VALUES (1, 'test', 1, 1);

session1执行

set autocommit=0;begin;select *from goods where id=1 and goods.status=1 for update ;update goods set status=2 where id=1;

session2执行

begin;select * from goods where id=1 for update;

这时候session2是阻塞的,因为锁还在session1,所以锁一直在等待。如果session1一直不提交,那么session2将在一定时间后超时断开连接,并且报

(1205, 'Lock wait timeout exceeded; try restarting transaction')错误,

具体的锁等待时间可以通过设置innodb_lock_wait_timeout参数进行控制。

如果此时在session1中执行commit 操作,那么session2将得到查询结果,并把锁交给session2。

我们还可以通过

show status like 'innodb_row_lock_%';

来进一步查看锁信息。

乐观锁

乐观锁不同于悲观锁,乐观锁是通过自身的程序实现,而不是mySql自身实现。

乐观锁查询的时不上锁,只有在更新的时候检查版本号。

比如我们查询到goods表中version 为1 那么在更新这个表的时候Sql将是

select * from goods where id=1;update goods set status=2,version=version+1 where id=1 and version=1;

这里的version是查询时候的版本号,每次更改将会导致version+1。如果版本号不匹配更新将不成功。

关于悲观锁与乐观锁怎么在Mysql中使用问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

乐观 悲观 查询 时候 版本 问题 更新 可以通过 数据 时间 更多 订单 帮助 解答 易行 成功 简单易行 两个 例子 信息 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 河南通讯软件开发服务值得推荐 伊犁网络安全工作 数据库怎么设置默认值为下一年度 项目软件开发转运维制度 来安软件开发项目管理在线咨询 数据库中的交运算 淘宝虚拟服务器类目 比账户不能登陆这台服务器 对日软件开发去日本 泰豪科技互联网能源 网络安全小常识口诀 基因启动子数据库epd java 服务器 框架 国家网络安全的985大学 2021信息网络安全合格证明 东土科技工业互联网产品毛利率 数据库时间戳转化 数据库资源耗尽 怎么查询服务器ip地址 网络安全与信息技术专业就业前景 好的软件开发项目系统 如何维护网络安全做出贡献 科技互联网财经文娱 山西网络安全公司官网 银行网络安全知识资料大全 腾讯云服务器 安全组不生效 数据库改数据后会变脏数据吗 美国网络安全公司和越南政府 中国网络技术公司是干什么的 济南源城网络技术有限公司
0