一点并发安全的疑惑

网上都认为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-13 17:19 浙江

相关推荐

2024-12-30 10:54
大连理工大学 营销
龙吟风歌:不喜欢就立马换一份,不过公关类的和运营类的都比较杂......还是想清楚
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务