ezwd 最近的时间轴更新
ezwd

ezwd

V2EX 第 158639 号会员,加入于 2016-02-13 11:05:08 +08:00
今日活跃度排名 21704
根据 ezwd 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
ezwd 最近回复了
松鼠快看
2023-11-28 11:16:21 +08:00
回复了 jonsmith 创建的主题 MySQL 库存扣减时,出现 MySQL 死锁是什么原因?
MySQL 的 InnoDB 存储引擎用行级锁来实现多版本并发控制( MVCC ),同时也支持 "SELECT ... FOR UPDATE" 这种显式锁定。在解决超售问题的场景中,死锁的出现可能是由于并发事务试图在同一时间内锁定同一行数据导致的。

对于你的第一种 SQL 语句:

```
UPDATE inventory SET stock = stock - Y WHERE product_id = X AND stock >= Y;
```
这个语句在更新前会先检查 stock >= Y 条件,如果不满足这个条件,该行不会被锁定也不会被更新。当你有多个并发事务试图更新同一个 product_id ,并且 stock 库存不足时,这些事务可能会互相等待其他事务释放锁,这就可能导致死锁。

对于你的第二种 SQL 语句:

```
SELECT stock FROM inventory WHERE product_id = X FOR UPDATE;
UPDATE inventory SET stock = stock - Y WHERE product_id = X;
```
在这个情况下,你先显式地获取了一个行级锁,这会阻止其他事务在此期间修改这一行。然后,你再执行更新操作。由于你已经持有了行级锁,所以其他试图更新这一行的事务会被阻塞,直到你的事务完成,这样就避免了死锁。

总的来说,第一种 SQL 语句在高并发的情况下可能会导致死锁,因为它试图在同一时间内更新同一行。而第二种 SQL 语句通过显式获取行级锁来避免这个问题。这就是为什么第二种 SQL 语句在你的测试中没有出现死锁。
2023-05-26 13:50:28 +08:00
回复了 lk960511 创建的主题 程序员 超过了 35 岁的程序员该何去何从?
搞点副业,做知识付费
2023-05-17 11:17:01 +08:00
回复了 mrfox 创建的主题 问与答 有啥经济的无风扇主机实现方案推荐吗
散热效果好、便宜、静音,三选二
2022-11-29 11:01:09 +08:00
回复了 orluna 创建的主题 宽带症候群 家用服务器选择
弄了一个 12400 的 deskmini b660 ,32G 内存,挂机跑 QQ 机器人
用习惯了,人脑会自动切换,一摸键盘就知道应该用什么键位按快捷键
同 5800H ,用两个瓶盖把后面的脚垫垫起来,散热效果好很多
看这个界面像是 kibana ,是不是 elk 日志收集的时间间隔 1ms ,实际产生日志的时间间隔不止 1ms ?
2020-12-14 16:41:30 +08:00
回复了 fat4fox 创建的主题 晒晒更健康 晒晒大家主力电脑的配置吧!
AMD Ryzen 7 5800x
ASUS TUF GAMING B550M-PLUS
Galaxy RTX 3070 GAMER OC
G.SKILL DDR4 3600 16Gx2
Samsung 970evo plus 512G
主要用来看 b 站、逛贴吧和斗鱼云游戏
2020-07-06 16:50:30 +08:00
回复了 ccming 创建的主题 上海 迫于被淋湿,求推荐一款又大又轻又坚固的雨伞🌂☔️☂️
blunt classic,用了 4 年了,满足又大又坚固(可以抗台风),就是比较重
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3101 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 23ms · UTC 13:49 · PVG 21:49 · LAX 05:49 · JFK 08:49
Developed with CodeLauncher
♥ Do have faith in what you're doing.