sql >> Database teknologi >  >> RDS >> Mysql

Leasing job (atomic update and get) fra en MySQL database

Min løsning med et lille trick:først:du skal bruge et undervalg, så UPDATE ikke nu, det er den samme tabel anden sekund:du skal initialisere @id'et med "(SELECT @id:=0)" ellers returnerer den ingen række. den sidst indstillede værdi. Her kan du også angive, om de returnerer 0 eller '', når der ikke findes noget resultat.

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. importere fjerndatabase til localhost

  2. Implementering af tilladelser baseret på omdømme

  3. Postgresql og jsonb - indsættelse af en nøgle/værdi i et multi-level array

  4. VARCHAR vs TEXT i MySQL