gpt4 book ai didi

PHP MySQL Task API,防止重复记录

转载 作者:行者123 更新时间:2023-11-30 22:54:35 25 4
gpt4 key购买 nike

我正在为远程“工作”机器构建一个 PHP RESTful-API 以自行分配任务。 API 主机上的 MySQL InnoDB 表保存挂起的记录,工作人员可以在准备好处理记录时从 API 中获取这些记录。如何防止并发请求工作系统获得相同的记录?

我最初的防止这种情况的计划是在默认 NULL 字段中使用唯一生成的 ID 更新单个记录,然后轮询唯一 ID 字段匹配的记录的详细信息。

例如:

UPDATE mytable SET status = 'Assigned', uniqueidfield = '3kj29slsad' 
WHERE uniqueidfield IS NULL LIMIT 1

在同一个 PHP 实例中,下一个查询:

SELECT id, status, etc FROM mytable WHERE uniqueidfield = '3kj29slsad'

然后将上述 SELECT 语句的结果记录提供给工作人员。这是否会阻止同时请求工作人员获得向他们显示的相同记录?我不太确定 MySQL 如何处理 UPDATE 查询中的查找,以及两个 UPDATES 是否可以“找到”相同的记录,然后按顺序更新它。如果可行,是否有更优雅或更标准化的方法(不确定是否需要对此应用 FOR UPDATE)?谢谢!

最佳答案

别管我之前的回答了。我相信我明白你在问什么。我会改写它,这样其他人可能会更清楚。

“如果我同时发出上述两个更新语句,会发生什么?”

根据 http://dev.mysql.com/doc/refman/5.0/en/lock-tables-restrictions.html ,第二个语句不会干扰第一个。

Normally, you do not need to lock tables, because all single UPDATE statements are atomic; no other session can interfere with any other currently executing SQL statement.

一种更优雅的方式可能是基于意见,但我认为您所做的没有任何问题。

关于PHP MySQL Task API,防止重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26987308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com