mysql 并发请求时,第二个请求保存的数据是第一个请求的,请问是什么原因?怎么解决?

环境 mysql,django

通过此请求函数,逐条的生成订单的佣金

def get(self, request):
    #
    # 通过订单表,获取一条未生成佣金的订单
    #
    order = Order.objects.filter(未生成佣金=True).first()
    if order:
        # 根据用户uid生成佣金
        order.wages = get_wages(order.uid)
        # 保存至数据库
        order.save()
    return Response('佣金生成成功')

出现的问题:

当两个请求同时过来时

请求A: 获取到用户A的订单,生成用户A的佣金,保存(正常)。

请求B:获取到用户B的订单,但是这里用户B的佣金是请求A生成的佣金,,并不是请求B生成的佣金(佣金数据生成错误)

问题总结:

两个请求同时访问这个链接,请求A保存的佣金是对的。但是请求B中保存的佣金并不是请求B生成的佣金,而是请求A生成的佣金

请问发生这种情况的原因是什么?

我应该怎么解决这种情况

阅读 1.7k
1 个回答

order = Order.objects.filter(未生成佣金=True).first()你这条语句,没有指定用户A还是B,只是第一条没有生成佣金的订单

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题