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

问题描述 投票:0回答:1

在 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
,但这对于这种操作来说似乎太笨重了。

mysql sql events copy sql-insert
1个回答
0
投票

你每分钟都在运行事件并想进入最后三分钟,我怀疑你有那么多新的插入,或者你需要一个 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 ;
© www.soinside.com 2019 - 2024. All rights reserved.