事务Transaction
你可能会说
创建订单和扣库存必须一起成功,任何一步失败都不能留下半个订单。
作为一个整体提交或回滚的一组数据库操作。例如创建订单时要同时写入订单记录并扣减库存;如果库存不足,订单也不应留下。事务能把同一数据库中的这组操作一起撤销,但不会自动撤销已经发出的支付、邮件等外部动作。
也常被叫作数据库事务Transaction Block
延伸阅读 · 权威出处
创建订单和扣库存必须一起成功,任何一步失败都不能留下半个订单。
用户看见订单,但库存没有扣减。
问题与关键机制:创建订单和扣减库存分开处理时,扣库存失败可能留下半成品订单;把这两步放进同一个事务后,只要有一步失败,就会回滚已经写入的订单与库存修改。
怎样观察改善:订单与库存操作全部成功后才一起提交。成功时返回订单号,失败时返回具体原因,不能把未完成的订单显示成成功。
诊所预约也需要事务:新增预约记录与占用医生时段应放进同一个事务;如果时段已被占用就一起回滚,不能留下没有时段的预约。
请检查下单流程,把创建订单和扣减库存放进同一个数据库事务。模拟扣库存失败,确认订单记录和库存都没有留下部分改动;全部成功时再提交并返回订单号。不要假设外部支付或邮件能被这个事务自动回滚。