sql >> Database >  >> RDS >> Mysql

Taken leasen (atomaire update en ophalen) uit een MySQL-database

Mijn oplossing met een klein trucje:eerst:je moet een subselect gebruiken zodat UPDATE niet nu dezelfde tabel is en een tweede:je moet de @id initialiseren met "(SELECT @id:=0)" anders als ze geen rij hebben gevonden, retourneren ze de laatst ingestelde waarde. Hier kunt u ook aangeven of ze 0 of '' retourneren als er geen resultaat wordt gevonden.

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. TAN() Voorbeelden in SQL Server

  2. mysql-bestelling en groupby

  3. jQuery UI Sorteerbaar en schrijf vervolgens de volgorde in een database

  4. langzame mysql-query die honderdduizenden keren per uur moet worden uitgevoerd