如果几个客户在MySQL中选择,如何避免竞争条件?

时间:2012-03-20 06:27:33

标签: mysql perl

我有一个task_id表,它有两列:

`tid`:task id,
`state`:0:unfinished,1:processing,2:finished

如果我只使用一个客户端(Perl脚本),这很容易:获取一个unfinished任务ID,将其更新为processing,处理它,并在循环中将其更新为finished

但我打算用几个客户来完成这项任务。两个客户端有可能在同一时间获取记录,如何避免它?

2 个答案:

答案 0 :(得分:3)

如果您的mysql表的引擎是INNODB,那么它会在更新表记录时锁定该特定行,以便其他请求不会与先前的更新冲突。

答案 1 :(得分:2)

让更新如下:

update task_id set state=1 where tid=? and state=0;

然后检查更新是否实际修改了记录。