MySQL 中并发工作线程的原子读取和更新
P粉239164234
P粉239164234 2023-12-21 13:38:51
[MySQL讨论组]

假设我有多个工作人员可以同时读取和写入 MySQL 表(例如 jobs)。每个工人的任务是:

  1. 查找最旧的 已排队 作业
  2. 将其状态设置为 RUNNING
  3. 返回对应的ID。

请注意,当工作人员运行步骤 #1 时,可能有任何符合条件的作业(即 QUEUED)。

到目前为止我有以下伪代码。我相信如果步骤 #1 没有返回作业,我需要取消 (ROLLBACK) 事务。我将如何在下面的代码中做到这一点?

BEGIN TRANSACTION;

# Update the status of jobs fetched by this query:
SELECT id from jobs WHERE status = "QUEUED" 
ORDER BY created_at ASC LIMIT 1;

# Do the actual update, otherwise abort (i.e. ROLLBACK?)
UPDATE jobs
SET status="RUNNING"
# HERE: Not sure how to make this conditional on the previous ID
# WHERE id = 

COMMIT;

P粉239164234
P粉239164234

全部回复(1)
P粉627110304

龙腾公司开户{薇 sr88861}(电)132/6234/5696在决定开户之前,公司的管理团队进行了深入的研讨与细致的规划。首先,明确了开户的目的与需求。是为了日常资金的收付流转更为便捷高效?还是为了拓展融资渠道,为公司的大规模项目筹备资金?亦或是为了更好地进行财务管理与风险防控?经过多番权衡,确定了开户将服务于公司全方位的金融运作需求,包括但不限于贸易往来结算、工资发放、税务缴纳以及潜在的资金投资与借贷等。同时,对市场上众多的金融机构展开了全面的调研。考量的因素涵盖了银行的信誉度、服务质量、手续费标准、金融产品的丰富性以及网点的便捷性等。经过层层筛选与比较,最终锁定了几家在业内口碑良好、实力雄厚且与***公司业务适配度较高的银行作为开户的候选对象。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号