📌 问题描述

用户并发提交订单时,如何通过数据库事务保证“扣减商品库存、生成订单、记录账户余额变动”的原子性?请说明事务传播行为和隔离级别的选择

✅ 回答要点

为了保证这三个操作的原子性,我会将它们放在同一个数据库事务中执行。在Spring中,使用@Transactional注解,默认的REQUIRED传播行为即可(如果当前没有事务则新建,有则加入)。隔离级别选择READ_COMMITTED,防止脏读的同时保证并发性能;对于库存扣减,我会在SELECT ... FOR UPDATE行锁或乐观锁(版本号)来避免超卖。余额变动同理。若任何一步失败,整个事务回滚。

🔗 相关知识

💡 记忆技巧

📚 参考资料