Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dzierżawa zadań (atomowa aktualizacja i pobieranie) z bazy danych MySQL

Moje rozwiązanie z małą sztuczką:po pierwsze:musisz użyć podselekcji, aby UPDATE nie było teraz tej samej tabeli:musisz zainicjować @id za pomocą "(SELECT @id:=0)" w przeciwnym razie, jeśli nie znaleziono żadnego wiersza, który zwróci ostatnia ustawiona wartość. Tutaj możesz również określić, czy zwracają 0 lub '', gdy nie zostanie znaleziony wynik.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zarządzać uprawnieniami za pomocą ról w MySQL

  2. Błąd krytyczny:Przekroczono maksymalny czas wykonania 30 sekund w ...\model.php w wierszu 183

  3. Jak uruchomić zestaw zapytań SQL z pliku w PHP?

  4. Indeksy MySQL 5.0 — unikatowe kontra nieunikalne

  5. Funkcja MySQL SIN() — zwraca sinus liczby w MySQL