提问人:async life 提问时间:9/4/2020 更新时间:9/4/2020 访问量:37
停止使用MySQL InnoDB同时访问两行?
Stop two rows being accessed at the same time with MySQL InnoDB?
问:
这是我之前问题的续集,它没有 100% 解决问题。在这里找到它
我有一个 InnoDB MySQL 数据库,可以从 10 - 20 个外部服务访问这个数据库。我注意到多个服务从表中拉入同一行,我怎样才能阻止这种情况发生?queue_items
以下是我在应用程序中获取队列项的方法,
dbConnection.SetQuery(@"
SET @updated_id := 0;
UPDATE `queue_items`
SET `processed_at` = @processedAt, `worker_id` = @workerId, id = (@updated_id := id)
WHERE `processed_at` IS NULL AND `completed_at` IS NULL AND `confirmed` = '1'" + (onlyPublic ? " AND `is_private` = '0'" : "") +
@"ORDER BY id ASC LIMIT 1;
SELECT @updated_id;");
然后,我使用第一个查询的结果进行查询,其值为 。SELECT WHERE ID
@updated_id
原始查询,
SET @updated_id := 0;
UPDATE `queue_items`
SET `processed_at` = @processedAt, `worker_id` = @workerId, id = (@updated_id := id)
WHERE `processed_at` IS NULL AND `completed_at` IS NULL AND `confirmed` = '1' ORDER BY id ASC LIMIT 1;
SELECT @updated_id;
答: 暂无答案
评论
FOR UPDATE
SELECT