在MySQL中将数据从一个表复制到另一个表的预定事件返回空结果

kknvjkwl  于 2023-02-28  发布在  Mysql
关注(0)|答案(1)|浏览(136)
    • 在phpMyAdmin本地服务器上运行:**我有两个表:user(有数据)和user_t(空)。它们有相同的列名、顺序和类型(user_t表有一个额外的列用于为输入添加时间戳)。

我想创建一个scheduled event来检查每个用户日志的timestamp是否有某个值,如果有,我想将其复制到user_t,同时从user中删除它。
删除工作正常,是INSERT INTO user_t SELECT * FROM user WHERE user.reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;给我带来了麻烦。

    • 这是我用来创建活动的代码:**
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;

但是,它一直返回empty result。所以,我想一定是我做错了什么。你们能从内心深处找到它来帮助我使这段代码工作吗?毕竟,它来自一个教程,应该没问题。
我试过玩这个代码,甚至考虑过研究transaction,但对于这种操作来说,它似乎太笨重了。

编辑

所以在玩了一些nbk的代码之后,我终于弄明白了,下面是适合我的代码(我概括了表和列名,这样它们就不会误导任何人):

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 ;

希望它能在未来帮助到像我这样的人。再次感谢nbk,你的快速帮助。非常感谢,当然,你的答案是正确的。

oknrviil

oknrviil1#

您每分钟运行一次事件,并希望输入最后三分钟,我不知道您有那么多新插入,或者您需要一个python脚本或插入一个小时==〉出于测试目的,我将频率设置为1分钟...
你还是应该重写你的活动。
首先,您是否真的需要重复项,可能是INSERT IGNORE,如果它违反了约束,则将输入新行
其次,如果您有多个语句,则需要使用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 ;

相关问题