DELIMITER |
CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO
BEGIN
DELETE FROM vehicle WHERE last_updated < (NOW() - INTERVAL 5 MINUTE)
END |
DELIMITER ;
上面我有一个 MySQL 事件,该事件每分钟运行一次,删除 5 分钟内未更新的行。我有另一个表,名为saved_vehicles。 vehicle
中的所有行saved_vehicle
中将有一行 table 。我想做的本质上是复制 last_updated
时间到saved_vehicle
表(出于示例目的,假设 saved_vehicle
字段为 last_known_online_time
。这实际上保存了车辆的副本及其最后已知的在线时间。
本质上,我是在删除行之前创建备份。
最佳答案
删除前插入saved_vehicles。 试试这个:
DELIMITER |
CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO
BEGIN
SET @time = NOW() - INTERVAL 5 MINUTE;
# select * is not very smart, it will also copy your primary key,
# so you can get error about duplicates. Listing fields would work here.
INSERT INTO saved_vehicle (SELECT * FROM vehicle WHERE last_updated < @time);
DELETE FROM vehicle WHERE last_updated < @time;
END |
DELIMITER ;
为了避免列出我在评论中提到的字段,请尝试选择除主键列之外的所有字段。 要执行此检查 how to select all columns except one
更新
我通过上面提到的插入 - 如果您的 saved_vehicle
表与 vehicle
表具有相同的结构,但其主键的名称与 vehicle
不同(例如 base_id
,当 vehicle
PK 为 id
时)及其 int auto_increment
那么它将正常工作.
关于MySQL 事件变量 - 将值复制到另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21099062/