设为首页
收藏本站
开启辅助访问
全部
问与答
创意
技术
酷工作
生活
交易
资源
节点
飞墙
Follow
明白贴
报酬
登录
注册
飞社-令人惊奇的创意工作者社区-
›
首页
›
MySQL
›
关于在业务中 MYSQL 事务查询的一个疑惑
FSHEX=FIND+SHARE+EXPRESS
飞社-令人惊奇的创意工作者社区- 是一个关于发现分享表达的地方
现在登录
没有账号?
立即注册
推荐主题
›
各位大佬,建议今年买房么
›
程序员 35 岁被优化真的天经地义
›
证券低佣开户万 0.854 免 5, 评论抽奖送五
›
你们代码编辑器会自动保存吗
›
黑客是如何找到带有漏洞的服务器?
今日热议主题
用 Rust 搞了个轻量级 Redis 管理工具,感
处理家里垃圾之--iPhone5,6,7
在少数派看到一个很有趣的产品叫 quote0,
未来教育,要把老师干掉了?
想把 NAS 的服务通过 FRP 映射到公网,只通
复盘我的 ZImage 上线之路
基于 yii2 框架开发的后台管理软件,免费
35 岁不到,感觉在男性能力方面出了点问题
[开源] BiliPai - 用 Jetpack Compose 重新
NodeJS 漏洞中招了...
显示全部
|
最新评论
15 条回复
·
441 次点击
11#
kele1997
小成
2024-7-13 00:00:34
@leejinhong mysql 有默认提交的话,每一行 sql 都是有事务保证原子性吧
而且默认 mysql 隔离级别不就是可重复读嘛,不就保证了一个事务多次读获得同一个值
12#
vishun
小成
2024-7-13 11:50:14
总结下:
- 数据库层面:
- 要么 field=field+xxx 来保证原子性,比较简单,但是无法阻止超发等场景。
- fersion 乐观锁,大概率不会重复的情况下用。
- select for update 悲观锁,经常重复的情况下用或不太在乎性能下用。
- 极端的隔离级别设置为序列化,额,貌似很少用。
- 应用方面
- 各种应用锁、redis 锁,分布式锁等。
13#
mbeoliero123
初学
2024-7-13 12:04:08
行 sql 更新是会加行锁吧?这里并发冲突主要是你的 where 能不能找到原来的记录,如果是 where id = xxx ,这种并发度再高也是对那条记录进行串行操作,如果是 where fersion = xxx ,fersion 随时会变这种,感觉就是 4 楼说的乐观锁处理
14#
wenxueywx
初学
2024-7-15 09:42:42
乐观锁策略(读多写少场景):
- 查询库存值
- 更新库存时带上之前查询的库存数据:update xxx set stock = stock-1 where id = xxx and stock = xx;
- 更新成功才记流水;更新失败就重试
悲观锁策略(写多读少场景):
- 查询库存时就加锁,select * from xxx where xxx for update;
- update
- 记流水
15#
louettagfh
小成
2024-7-16 13:32:11
举个例子,在仓库库存管理中,如果在查询时库存是 30 ,但在查询完成后,其他业务操作改变了库存,导致库存变为 25 。然而,业务处理时依旧基于查询时的库存 30 进行操作,这样就会导致记录流水的值出现误差。
你这个例子就不可能在 MySQL 中发生. 一个事务不结束, 其他无法事务修改这个 record.
16#
asmile1993
小成
2024-7-19 15:57:47
@leejinhong 如果只是简单的 select ,在 RR 隔离级别下看到的的确是事务开始时的值,但当对记录进行修改操作时,用的是当前读—读最新的已提交记录,而不是一开始 select 得到的结果,想要了解更深的话,搜索下快照读和当前读。
1
2
/ 2 页
浏览过的版块
Google
人工智能
杭州
JavaScript
路由器
教育
返回顶部