recherche

Maison  >  Questions et réponses  >  le corps du texte

L'événement planifié pour copier des données d'une table à une autre dans MySQL renvoie des résultats vides

Fonctionnement sur le serveur local phpMyAdmin : J'ai deux tables : user(有数据)和user_t(vide). Ils ont les mêmes noms de colonnes, ordre et type (user_t la table a une colonne supplémentaire pour horodater l'entrée).

Je souhaite créer un 计划事件来检查每个用户日志的时间戳是否具有特定值,如果存在,我想将其复制到user_t 同时从 user pour le supprimer. très simple.

La suppression fonctionne bien. C'est le INSERT INTO user_t SELECT * FROM user WHERE user.reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE; qui me cause des ennuis.

Voici le code que j'ai utilisé pour créer l'événement :

CREATE EVENT users_u
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO 
INSERT INTO user_t SELECT * FROM user WHERE user.reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;
DELETE FROM user WHERE reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;

Cependant, il revient sans cesse 空结果. Alors, j'ai pensé que je devais faire quelque chose de mal. Pouvez-vous sincèrement m'aider à faire fonctionner ce code ? Après tout, cela vient d'un tutoriel et ça devrait aller.

J'ai essayé d'utiliser du code et j'ai même envisagé de faire des recherches 事务 mais cela me semble trop volumineux pour ce genre d'opération.

Modifier

Donc, après avoir joué avec le code de nbk, j'ai finalement compris et voici le code qui a fonctionné pour moi (j'ai généralisé les noms de tables et de colonnes pour qu'ils n'induisent personne en erreur) :

DELIMITER $$
CREATE EVENT event_name 
ON SCHEDULE EVERY 1 MINUTE 
STARTS CURRENT_TIMESTAMP 
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR 
DO 
    BEGIN 
    INSERT INTO empty_table (col_name1, col_name2, col_name3, col_name4, col_name5) 
    SELECT col_name1, col_name2, col_name3, col_name4, col_name5 FROM data_table WHERE col_name < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE; 
    DELETE FROM data_table WHERE col_name < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE; 
    END $$
DELIMITER ;

J'espère que cela aidera les gens comme moi à l'avenir. Merci encore nbk pour l'aide rapide. Merci beaucoup, bien sûr votre réponse est correcte.

P粉615886660P粉615886660441 Il y a quelques jours631

répondre à tous(1)je répondrai

  • P粉092778585

    P粉0927785852023-09-10 00:57:50

    Vous exécutez l'événement toutes les minutes et souhaitez saisir les trois dernières minutes, je ne sais pas si vous avez autant de nouvelles insertions ou si vous avez besoin d'un script python ou d'une insertion comme celle-ci pendant une heure ==>À des fins de tests, j'ai réglé la fréquence sur 1 minute...

    Vous devriez toujours réécrire vos événements.

    Tout d'abord, voulez-vous vraiment des doublons, peut-être INSERT IGNORE, si la contrainte est violée, une nouvelle ligne entrera

    Deuxièmement, si vous avez plus d'une déclaration, vous en avez besoin d'une BEGIN END

    DELIMITER $$
    CREATE EVENT users_u
    ON SCHEDULE EVERY 1 MINUTE
    STARTS CURRENT_TIMESTAMP
    ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO 
        BEGIN
            INSERT IGNORE INTO user_t SELECT * FROM user WHERE user.reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;
            DELETE FROM user WHERE reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;
        END $$
    DELIMITER ;

    répondre
    0
  • Annulerrépondre