多个插入/更新的唯一键异常

时间:2017-05-04 09:27:22

标签: php mysql laravel unique isolation-level

我的应用程序接收来自外部来源的多个请求(来自销售点单位的发票)。它每秒获得数十个请求,其中一些请求是相同的(具有相同的请求体)。

请求数据被转换并保存到两个关联表(外键)。如果记录已存在(由唯一复合键查询),则更新记录,否则添加记录。

问题在于,有时如果同时收到两个具有相同主体的请求,则app抛出异常,即唯一密钥已经存在且无法插入:

 SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry

这可能是MySQL中的某种竞争条件,但无法弄清楚

整个过程包含在Laravel事务中。我尝试设置不同的隔离级别。 SERIALIZABLE解决了这个问题,但后来我得到了很多死锁异常,而且我可以看到有时记录根本没有保存。

1 个答案:

答案 0 :(得分:0)

这很简单,这里发生了什么,你有一些声明为“UNIQUE”或“Primary Key”或类似的东西,你试图再次插入,一些关键限制它阻止了插入,这应该是好的,你要避免数据库中的重复条目,但你需要做什么来检查你想要插入的数据是否存在于数据库之前,而不是所有的列,你应该要求你的密钥或组合键,我不能如果我不知道数据或表格,请帮助你...

相关问题