php - 同时数据库插入请求期间的主键错误
问题描述
我在 Linux 服务器上创建了一个 API 连接器(在 Laravel 下),允许与现有的 SQL SERVER 数据库(DATABASE ERP)进行交互。我的控制器的一个方法允许通过 API 将销售插入到这个数据库中。ID 字段不是自动递增的(ERP 约束)。id 的创建必须手动生成,以满足 ERP 的需要。为了创建这个 ID,我在插入之前获取最后一个 ID(例如:WMA20021)并手动递增(例如:WMA20022)。
我注意到,当多个用户在购买后同时提交 API 请求时(相隔 1/2 秒),SQL Server 数据库返回主键约束错误。连接器同时执行插入,因此基于相同的 ID。
为了解决这个问题,我想设置一个安全性,在执行请求时锁定一个 ID,尽管多线程执行。
例子:
- 请求到达最近的第二个 REQUEST A & REQUEST B ……</li>
- 请求 A => 检查可用性……是的。因此 ID 被锁定
- REQUEST B => 检查可用性 ID... ID 已在使用中,搜索下一个可用 ID 并锁定
- 插入 REQUEST A 基
- 插入 REQUEST B 底座
我曾想过使用信号量(https://www.php.net/manual/fr/book.sem.php)。
你对此有什么想法吗?
提前致谢。
解决方案
推荐阅读
- reactjs - Redux 防止不必要的影响
- java - 一个 JSON 数组 - 格式化和解析
- cakephp - CakePHP 2.10 路由一个独特的 slug 多个模型
- java - 使用正则表达式匹配较长字符串时的 StackOverflowError - 优化
- python - 错误:找不到满足 dotnet 要求的版本
- python - 如何在 Python 中编写 ASCII 凯撒密码
- c# - 让 Dapper 将 DateTimes 分配为 UTC,将 Date 分配为 Local
- azure - 如何在 Azure 数据工厂管道中复制整个架构/数据库?
- oracle-data-integrator - ODI 12 命令startscen.cmd 不返回代码
- java - JavaFX TextArea onSelectionChange 方法