phoben 发表于 2024-11-10 13:09:22

【FORGUNCY-16093】如何在活字格中对数据库进行原子性更新?

本帖最后由 Brian.Zhang 于 2024-11-13 20:31 编辑

-- 增加库存数量
UPDATE inventory SET quantity = quantity + delta WHERE sku = 'SKU123';

-- 减少库存数量(并确保库存不为负数)
UPDATE inventory SET quantity = quantity - delta WHERE sku = 'SKU123' AND quantity >= delta;


在一些库存操作、金额操作等敏感场景下,为了确保并发时的数量增减不出现问题,需要用到这种原子性的操作。
例如上面代码中,就使用了 "quantity + delta",让数据库更新的值为“本身值”+“增加值”
在活字格中一直无法实现这一点,之前也 提到过类似需求,但是一直没有得到重视,希望大佬们能重视一下这种数据库的基础特性,有些场景可能绕不开。


建议如下:

mfkpie8 发表于 2024-11-10 13:15:17

支持+1这个是正常的逻辑,之前我也提过的。他们说先取值然后再赋值的逻辑!我觉得这样才是 减少很多变量的问题

phoben 发表于 2024-11-10 13:27:39

mfkpie8 发表于 2024-11-10 13:15
支持+1这个是正常的逻辑,之前我也提过的。他们说先取值然后再赋值的逻辑!我觉得这样才是 减少很多变量 ...

两个人一起取值都是100,其中一个人+1变成101,第二个人再更新,还会是101,官方有一个“并发控制策略”,通过乐观锁去判断,但是这样逻辑就比较麻烦,如果直接用字段+1就比较容易解决

Brian.Zhang 发表于 2024-11-13 20:29:33

已采纳。

0.618 发表于 2024-11-14 08:27:31

同样需求

小侠米 发表于 2024-11-15 10:20:13

Brian.Zhang 发表于 2024-11-13 20:29
已采纳。

同需求。
确实可以简化逻辑运算的复杂都,增强数字准确性

Brian.Zhang 发表于 2024-11-15 10:39:08

0.618 发表于 2024-11-14 08:27
同样需求

:loap1:
页: [1]
查看完整版本: 【FORGUNCY-16093】如何在活字格中对数据库进行原子性更新?