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 heures tous les jours. Que devrais-je mettre à la place de TIMESTAMP?

27
demandé sur Jason 2010-06-18 18:07:33

6 réponses

documentation sur CREATE EVENT est assez bon, mais il faut du temps pour bien faire les choses.

Vous avez deux problèmes, tout d'abord, faire de l'événement récurrent, deuxième, le faire fonctionner à 13:00 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;

cette liste répertorie chaque événement avec ses métadonnées, comme s'il devait être exécuté une seule fois, OU être récurrent.

le second problème: pointer l'événement récurrent sur un point précis de l'horaire.

en essayant différents types d'expressions, 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;
29
répondu olleolleolle 2016-01-28 18:55:46

C'est peut-être trop tard pour votre travail, mais voici comment je l'ai fait. Je veux que quelque chose fonctionne tous les jours à 1h du matin - je crois que c'est similaire à ce que vous faites. Voici comment j'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
24
répondu Andreas 2016-01-21 19:27:27

mon cas d'utilisation est similaire, sauf que je veux qu'un événement de nettoyage de journal tourne à 2h 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 de rater potentiellement le premier jour (et, étant donné qu'il est de courir à 2h puis 2h demain est presque toujours le prochain 2h) donc j'utilise:

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 
14
répondu Adam 2013-01-31 09:01:57
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;
10
répondu mercu 2014-05-12 08:59:04

Essayez ceci

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
répondu Naveen Kumar 2012-04-17 12:32:48
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
répondu aymen messaoudi 2015-08-25 15:50:29