在 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
,但这对于这种操作来说似乎太笨重了。
你每分钟都在运行事件并想进入最后三分钟,我怀疑你有那么多新的插入,或者你需要一个 python 脚本或者这样的插入一个小时
你仍然应该重写你的事件。
首先你真的想要重复项吗,也许是一个
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 ;