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?
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;
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
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
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;
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
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());