java限制只能修改一次订单_面试官再问你怎么修改订单,就把这篇甩给他

本文探讨了如何在Java订单服务中实现幂等性,以防止重复创建订单和解决ABA问题。通过预先生成订单号以利用数据库的唯一约束,确保创建订单接口的幂等性。同时,通过版本号机制,更新订单时校验版本号,防止数据错误。这两种方法可确保订单服务的数据一致性。
摘要由CSDN通过智能技术生成

从下单开始、支付、发货,收货,每一个环节,都少不了更新订单,每一次更新又需要同时更新好几张表。

这些操作可能被随机分布到很多台服务器上执行,服务器有可能故障,网络有可能出问题。

那么如何才能保证订单服务的数据一致性呢?

正确使用数据库的事务

eg.创建订单时,要同时往订单表和订单商品表中插入数据,那这些插入数据的INSERT必须在一个数据库事务中执行,数据库的事务可以确保:

执行这些INSERT语句,共赴生死!

但还有很多难以发现的坑存在

1 基本功能和数据表

任何系统的订单服务都是独一无二的,基于不同业务,有很多个人限定.不过核心都大同小异,让我们研究其共同点.

基本功能

创建订单

随着购物流程更新订单状态

查询订单,包括用订单数据生成各种报表

数据表

订单主表:

也叫订单表,保存订单的基本信息

订单主表和后面的几个子表都是一对多,关联的外键就是订单主表的主键,也就是订单号

订单商品表:

保存订单中的商品信息

订单支付表:

保存订单的支付和退款信息

订单优惠表:

保存订单使用的所有优惠信息。

2 如何避免重复下单?

用户在浏览器页面上点击“提交订单”按钮的时候,浏览器就会给订单系统发一个创建订单的请求,订单系统的后端服务,在收到请求之后,往数据库的订单表插入一条订单数据ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值