web-dev-qa-db-fra.com

Mise à jour d'une colonne après expiration de l'heure spécifique dans MySQL

  1. J'ai une table où j'ai une colonne nommée state(int(2)) et modify_time (time_stamp sur la mise à jour de l'horodatage actuel).

  2. J'ai un déclencheur de mise à jour qui modifie la valeur de la colonne d'état sur 0 Basé sur une condition.

  3. Je veux définir la valeur de state colonne sur 1 après 24 heures de modify_time, si c'est toujours 0.

  4. J'ai essayé ci-dessous la méthode pour tester:

    CREATE EVENT myevent1 
     ON SCHEDULE AT current_timestamp + interval 1 minute 
     DO UPDATE test.mytabletable SET state = 0;
    

Cela n'a rien fait. Y a-t-il une méthode alternative?

3
Ankit Kapoor
SET GLOBAL event_scheduler = ON; -- enable event scheduler.
SELECT @@event_scheduler;  -- check whether event scheduler is ON/OFF
CREATE EVENT e_store_ts  -- create your event
    ON SCHEDULE
      EVERY 24 HOURS  -- run every 24 hours
    DO
      UPDATE myschema.youtable set mycolumn='1'
2
Surendra Singh

Votre requête UPDATE nécessitera du travail, car comme écrit, il mettra à jour toutes les valeurs state à 0 chaque minute, mais si cela ne fonctionne pas, vous devez vérifier que le planificateur d'événements est en cours d'exécution.

mysql> show variables like 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | OFF   | 
+-----------------+-------+
1 row in set (0.00 sec)

Ça ne devrait pas être éteint.

mysql> set global event_scheduler = on;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+
1 row in set (0.00 sec)

Si c'est déjà sur, vérifiez votre journal d'erreur MySQL. Les événements qui échouent à exécuter vont enregistrer les messages là-bas.

1
Michael - sqlbot