汇总明细时一定要先锁定明细

案例描述

部分对账文件的明细汇总金额比实际要少。

原因分析

在明细汇总和更新汇总状态为“已处理”之间存在几毫秒的时间差。

在时间差内又入库了多条明细,并且状态由“待处理”更新为“已处理”,但是这部分明细并没有参与明细汇总,因此被遗漏了。
汇总处理sql简略如下:

 <!--00是待处理,01是已处理-->
SELECT SUM(amount) from fs_detail where status = '00';

更新状态sql简略如下:

update fs_detail set status = '01' where status = '00';

解决方案

新增明细状态“处理中”,在明细汇总之前,锁定符合汇总条件的明细为“处理中”,只汇总“处理中”状态的明细,汇总完成后将“处理中”的明细状态更新为“已处理”。

如果在这时间差内有明细入库,由于它们的状态是“待处理”,所以既不会参与汇总,也不会被更新状态,将会参与下一轮汇总。

如果汇总过程中出现异常,则回滚这次锁定的明细状态,由“处理中”回滚为“未处理”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值