L'événement planifié pour copier des données d'une table à une autre dans MySQL renvoie des résultats vides
P粉615886660
P粉615886660 2023-09-09 09:47:01
0
1
638

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粉615886660
P粉615886660

répondre à tous(1)
P粉092778585

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 ;
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal