在 phpMyAdmin 本地服务器上运行:
我有两个表:user
(有数据)和user_t
(空)。
它们具有相同的列名、顺序和类型(user_t
表有一个额外的列用于为输入添加时间戳)。
我想创建一个计划事件
来检查每个用户日志的时间戳
是否具有特定值,如果存在,我想将其复制到user_t
同时从 user
中删除它。非常简单。
删除工作正常。正是 INSERT INTO user_t SELECT * FROM user WHERE user.reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;< 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;
但是,它不断返回空结果
。所以,我认为我一定做错了什么。
你能发自内心地帮助我让这段代码工作起来吗?毕竟,它来自教程,应该没问题。
我尝试过使用代码,甚至考虑过研究事务
,但这对于这种操作来说似乎太庞大了。
因此,在使用 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 的快速帮助。非常感谢,当然,您的答案是正确的。
你每分钟运行一次事件并想要输入最后三分钟,我不知道你有那么多新插入,或者你需要一个Python脚本或者这样插入一小时 ==>出于测试目的,我将频率设置为 1 分钟...
您仍然应该重写您的事件。
首先,您是否真的想要重复项,也许是
INSERT IGNORE
,如果违反约束,它将输入新行第二,如果你有不止一个语句,你需要一个
BEGIN END