订单系统流程

2025-01-04 18:49:32

1、在订单表生成订单。(status为0表示未支付,status为1表示已支付)粘址地鲥鲣剔墟栏mrw.so/2LTLqB例如:表 bill数据 {"id":"1"荑樊综鲶,"amount":"100","status":"0","time":"2017-10-23 15:00:00"}

订单系统流程

2、点击支付,开启事务,嚼但匙噻首先查询订单粘址地栏mrw.so/2LTLqB例如:begin transaction;s髫潋啜缅elect * from bill where id = 1 for update;此次使用for update锁定这条记录,并防止其他回话进入订单操作流程

订单系统流程

4、结束事务。(注意:在上面流程中有失败的情苄念上妒况必须进行rollback,退出事务,防止持续加锁或者数据长时间未提交,可以使用try catch)粘址地栏mrw.so/2LTLq蚱澄堆别Bcommit;end transaction;

订单系统流程

7、2号会话在此同时进入select * from bill where id = 1 for update;锁定记录,首先必须等待1号会话提交或者回滚,因为1号会话已经对此订单加持行锁。

订单系统流程

9、2号会话成功进行select * from bill where id = 1 for update;并查出status的状态为1,已经已经支付。

订单系统流程
猜你喜欢