MySQL事件变量 - 将值复制到另一个表

时间:2014-01-13 18:53:37

标签: mysql sql

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。这基本上可以保存副本该车辆的最后一次在线时间。

基本上我是在删除行之前创建备份。

1 个答案:

答案 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_idvehicle PK为id)及其int auto_increment然后它会很好用。