【发布时间】:2017-04-12 15:59:13
【问题描述】:
解释实际发生的情况:
外部服务将带有 XML 数据的 HTTP POST 请求发送到 PHP 脚本。此脚本检查数据是否已存在于 MySQL 数据库中。如果没有,则插入一条新记录。
现在出现了第二项故障安全服务。它将完全相同的 XML 数据发送到 PHP 脚本。
问题:
脚本已经检查记录是否存在。但是请求几乎同时出现,并且脚本被并行调用。所以数据相同的两个请求的数据都被插入了。
我考虑过使用队列,但我想不出一个简单的方法来做到这一点。这整个过程其实很简单。
确保不插入数据两次的最简单方法是什么?
【问题讨论】:
-
使用唯一键,以及插入语句的 INSERT ON DUPLICATE KEY UPDATE 形式。使用 http 请求,无法确保收到订单。
-
使用事务。
-
我认为事务不会改变任何东西,但唯一键会 - 我认为。我会尝试清理数据库并添加唯一键。