Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Locação de trabalhos (atualização atômica e obtenção) de um banco de dados MySQL


Minha solução com um pequeno truque:primeiro:você deve usar uma subseleção para que UPDATE não seja a mesma tabela em um segundo:você deve inicializar o @id com "(SELECT @id:=0)" senão, se não encontrar nenhuma linha, eles retornam o último valor definido. Aqui você também pode especificar se eles retornam 0 ou '' quando nenhum resultado for encontrado.
UPDATE jobs SET lease=NOW() WHERE id =
  ( SELECT * FROM 
     ( SELECT @id:=id  FROM jobs,(SELECT @id:=0) AS tmp_id
       WHERE TIMESTAMPDIFF(HOUR,lease,NOW())>=8 
       AND NOT complete ORDER BY priority LIMIT 1
     ) AS tmp
  );