同时选择数据和UPDATE

时间:2013-07-07 16:21:11

标签: mysql sql sql-update

我有多个源执行相同的mysql查询来获取和执行作业(源代码是不同的PHP脚本)。 我想得到与过去距离最远的工作,所以我使用这个查询:

SELECT * FROM jobs ORDER BY last_done ASC

现在我的问题是每个源都应该得到唯一的结果,这意味着如果一个源获得job1这个作业应该得到last_done的更新,所以它再次位于表的底部,如果一个秒源执行该查询不应该获得job1,而是应该获得job2等等。

我遇到的问题是,如果我在选择之后单独更新,则有时两个来源几乎同时调用他们获得相同的工作。

我怎样才能最好地做到这一点,而不是两个来源一起查询得到同样的工作?

2 个答案:

答案 0 :(得分:1)

1 - 设置交易隔离级别可串行化 2 - 在单个事务中执行选择和更新。

注意: SERIALIZABLE隔离级别可能过度,请查看https://en.wikipedia.org/wiki/Isolation_(database_systems)http://msdn.microsoft.com/en-us/library/ms173763.aspx了解详情

答案 1 :(得分:0)

你应该使用交易。 一个实现可以 获取并将记录放在另一个表上job_in_progress

下次您可以选择不在job_in_progress中的作业。

以可序列化的隔离级别执行此事务