sql >> Databasteknik >  >> RDS >> Mysql

Leasing jobb (atomic update and get) från en MySQL-databas

Min lösning med ett litet trick:först:du måste använda ett underval så att UPPDATERING inte nu är samma tabell andra sekund:du måste initiera @id:et med "(SELECT @id:=0)" annars om den inte hittade raden returnerar det senaste inställda värdet. Här kan du också ange om de returnerar 0 eller '' när inget resultat hittas.

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
  );


  1. Wildfly 8.0.0 mysql problem med datakälla

  2. SQL-fråga; horisontellt till vertikalt

  3. Django+Postgres:aktuell transaktion avbryts, kommandon ignoreras till slutet av transaktionsblocket

  4. Varför datasäkerhetskopiering är viktigt för din organisation