首页 > 解决方案 > 同时数据库插入请求期间的主键错误

问题描述

我在 Linux 服务器上创建了一个 API 连接器(在 Laravel 下),允许与现有的 SQL SERVER 数据库(DATABASE ERP)进行交互。我的控制器的一个方法允许通过 API 将销售插入到这个数据库中。ID 字段不是自动递增的(ERP 约束)。id 的创建必须手动生成,以满足 ERP 的需要。为了创建这个 ID,我在插入之前获取最后一个 ID(例如:WMA20021)并手动递增(例如:WMA20022)。

我注意到,当多个用户在购买后同时提交 API 请求时(相隔 1/2 秒),SQL Server 数据库返回主键约束错误。连接器同时执行插入,因此基于相同的 ID。

为了解决这个问题,我想设置一个安全性,在执行请求时锁定一个 ID,尽管多线程执行。

例子:

我曾想过使用信号量(https://www.php.net/manual/fr/book.sem.php)。

你对此有什么想法吗?

提前致谢。

标签: phplaravel

解决方案


推荐阅读