我有一个task_id表,它有两列:
`tid`:task id,
`state`:0:unfinished,1:processing,2:finished
如果我只使用一个客户端(Perl脚本),这很容易:获取一个unfinished
任务ID,将其更新为processing
,处理它,并在循环中将其更新为finished
但我打算用几个客户来完成这项任务。两个客户端有可能在同一时间获取记录,如何避免它?
答案 0 :(得分:3)
如果您的mysql表的引擎是INNODB,那么它会在更新表记录时锁定该特定行,以便其他请求不会与先前的更新冲突。
答案 1 :(得分:2)
让更新如下:
update task_id set state=1 where tid=? and state=0;
然后检查更新是否实际修改了记录。