- 在phpMyAdmin本地服务器上运行:**我有两个表:
user
(有数据)和user_t
(空)。它们有相同的列名、顺序和类型(user_t
表有一个额外的列用于为输入添加时间戳)。
- 在phpMyAdmin本地服务器上运行:**我有两个表:
我想创建一个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,你的快速帮助。非常感谢,当然,你的答案是正确的。
1条答案
按热度按时间oknrviil1#
您每分钟运行一次事件,并希望输入最后三分钟,我不知道您有那么多新插入,或者您需要一个python脚本或插入一个小时==〉出于测试目的,我将频率设置为1分钟...
你还是应该重写你的活动。
首先,您是否真的需要重复项,可能是
INSERT IGNORE
,如果它违反了约束,则将输入新行其次,如果您有多个语句,则需要使用
BEGIN END