一点并发安全的疑惑
网上都认为update t_goods set stock=stock-1 where id=1 and stock>0;能解决超卖问题,但都没有说明其原理,比如innodb的锁机制此时如何,只说了保证了原子性,难道原子性就能保证并发安全了吗?我觉得不对吧,网上很多资料讲锁机制都是使用了如select for update 等显式的命令,或者就是看得晕乎乎,我询问chatgpt的时候它回答仍可能出现超卖,它说两个事务同时查询where所在处,都发现条件符合,都执行更新操作,它认为排它锁是在更新的操作中加的,即锁的延迟获取,所以什么是对的
全部评论
1、本来先select再update的两个sql现在变成一条sql了,保证了原子性 2、这里用的是乐观锁思想 即stock大于0才更新 但实际上对于数据库层面用了update在默认隔离级别下 加了写锁 即还是加了悲观锁 所以我认为是并发安全的
相关推荐
01-03 20:47
北京交通大学 Java
nsjbambmbs:简历一写就是微服务,一问实际就俩服务,简历一写就是高并发一问 QPS 个位数既然写了微服务,那我出系统设计题场景题也没啥问题吧 点赞 评论 收藏
分享
2025-11-17 12:02
吉林大学 Java
橙子飞行术:日常实习就是现在缺牛马了要招个人打杂 结果你说两个月后到 人家肯定不知道2个月后还需不需要一个打杂的啊。而且你现在想找实习,如果奔着就业去的 还管期末考干啥 考前一天看看不就行了 你985学历找实习嘎嘎乱杀的 点赞 评论 收藏
分享
2025-12-03 15:46
辽宁科技大学 golang
回家当保安:加油, 我当时也想拒字节面试,是被HR鼓励着我面试。然后走了2周流程 ,一共3+1 面,最后惊喜的发了offer 点赞 评论 收藏
分享