web-dev-qa-db-fra.com

Planificateur d'événements MySQL à une heure précise tous les jours

Voici ma requête

CREATE EVENT reset  ON SCHEDULE AT TIMESTAMP  DO UPDATE `ndic`.`students` SET `status` =  '0';  

Comment puis-je mettre à jour le statut à "0" à 13 h tous les jours. Que dois-je mettre à la place de TIMESTAMP?

29
gin

la documentation sur CREATE EVENT est assez bonne, mais il faut un certain temps pour bien faire les choses.

Vous avez deux problèmes, premièrement, pour que l'événement se reproduise , deuxièmement, pour le faire fonctionner à 13h00 tous les jours .

Cet exemple crée un événement récurrent.

CREATE EVENT e_hourly
    ON SCHEDULE
      EVERY 1 HOUR
    COMMENT 'Clears out sessions table each hour.'
    DO
      DELETE FROM site_activity.sessions;

Lorsque vous êtes dans le client MySQL en ligne de commande, vous pouvez:

SHOW EVENTS;

Cela répertorie chaque événement avec ses métadonnées, comme s'il devait s'exécuter une seule fois ou être récurrent.

Le deuxième problème: pointant l'événement récurrent vers un élément de planification spécifique .

En essayant différents types d'expression, nous pouvons trouver quelque chose comme:

CREATE EVENT IF NOT EXISTS `session_cleaner_event`
ON SCHEDULE
  EVERY 13 DAY_HOUR
  COMMENT 'Clean up sessions at 13:00 daily!'
  DO
    DELETE FROM site_activity.sessions;
31
olleolleolle

C'est peut-être trop tard pour votre travail, mais voici comment je l'ai fait. Je veux que quelque chose soit exécuté tous les jours à 1 h du matin - je crois que cela ressemble à ce que vous faites. Voici comment je l'ai fait:

CREATE EVENT event_name
  ON SCHEDULE
    EVERY 1 DAY
    STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR)
  DO
    # Your awesome query
31
user3155099

Mon cas d'utilisation est similaire, sauf que je veux qu'un événement de nettoyage des journaux s'exécute à 2 heures du matin tous les soirs. Comme je l'ai dit dans le commentaire ci-dessus, le DAY_HOUR ne fonctionne pas pour moi. Dans mon cas, cela ne me dérange pas vraiment de manquer potentiellement le premier jour (et, étant donné qu'il doit fonctionner à 2 heures du matin, puis 2 heures du matin est presque toujours le 2 heures suivant), j'utilise donc:

CREATE EVENT applog_clean_event
ON SCHEDULE 
    EVERY 1 DAY
    STARTS str_to_date( date_format(now(), '%Y%m%d 0200'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
COMMENT 'Test'
DO 
15
Adam
DROP EVENT IF EXISTS xxxEVENTxxx;
CREATE EVENT xxxEVENTxxx
  ON SCHEDULE
    EVERY 1 DAY
    STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR)
  DO
    --process;

¡IMPORTANT! ->

SET GLOBAL event_scheduler = ON;
11
mercu

Essaye ça

CREATE EVENT event1
ON SCHEDULE EVERY '1' DAY
STARTS '2012-04-17 13:00:00' -- should be in the future
DO
-- your statements
END
9
Naveen Kumar
CREATE EVENT test_event_03
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
   INSERT INTO messages(message,created_at)
   VALUES('Test MySQL recurring Event',NOW());
1
aymen messaoudi