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
表中有一行。我想要做的是基本上将last_updated
时间复制到saved_vehicle
表(例如,假设saved_vehicle
字段为last_known_online_time
。这基本上可以保存副本该车辆的最后一次在线时间。
基本上我是在删除行之前创建备份。
答案 0 :(得分:0)
删除前插入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
不同(fe base_id
, vehicle
PK为id
)及其int auto_increment
然后它会很好用。