2

我构建的 Web 应用程序有问题。它通过网络服务接收和处理客户订单。

现在,它会检查 MySQL 以确保之前没有处理过这个订单,但最近,我们收到了一些重复的订单。这两个命令之间的时间间隔为 1 毫秒。

我知道这是我的应用程序,我应该知道这一点,但这更像是一个通用问题:

1毫秒的差异是否可能是MySQL将记录写入其数据库与我的应用程序检查该记录之间的差异?如果 MySQL 用这个时间来写它的记录,我可以看到有可能有 2 个重复的订单潜入。

似乎它允许重复,因为它正在检查订单是否已经存在,并确定它不存在。

如果是这样 - 有没有更好的方法来防止重复进入我的系统?

4

1 回答 1

1

您需要检查订单是否存在并有条件地将其插入到单个事务中。

如果您首先执行 SELECT 并单独执行 INSERT,则您会打开一个窗口,在该窗口中可能会发生相同的 INSERT。

如果您在使您的订单唯一的字段(例如订单 ID)上使用唯一索引,则插入相同数据的第二次尝试将以您可以正常处理的方式失败。

于 2012-08-30T04:45:19.963 回答