我的MySQL数据库中有一个表,它基本上包含“类似cron”的任务。基本上用户访问页面并且脚本(php)检查DB cron表,获取“可用”的最新5个结果并执行与任务相关的脚本。
目前我预见的问题是,2个用户可能会获得相同的任务。请注意,目前我首先运行UPDATE查询,该查询将5个任务分配给当前用户。之后我执行SELECT查询以获得分配给当前用户的5个任务,并且当他完成时我将任务标记为已完成。
理论上没有2个用户应该得到相同的任务,但我不确定。我很简单想知道MySQL是否可能有一个内置机制来确保这个或者是否有已知的方法呢?
感谢。
答案 0 :(得分:1)
您想使用Transactions。这样,您可以确保多步操作(例如[UPDATE,SELECT,UPDATE])完全完成,或者根本不会发生。
这是一个经典的concurrency问题,值得一读的是并发和事务,以便您了解主体。这将帮助您避免出现问题(并发中存在许多棘手的问题!)。