如何从数据库中循环删除条目?

时间:2015-05-23 17:01:13

标签: mysql database stored-procedures relational-database

我有一张表用于存储一些带有日期的条目,我把它放在" datetime"打字字段。 我想将那些条目自动移动到另一个表格。 结果将是一个包含所有传递条目的表,以及一个包含未来条目的表。

我正在考虑使用存储过程,但我不知道如何在需要时触发它们。 或者我可能需要一个始终在我的服务器上运行的独立应用程序。 或者也许我只是没有想到正确的,平庸的解决方案......

1 个答案:

答案 0 :(得分:0)

MySQL提供事件,它们与存储过程类似,但也可以在特定时间或特定时间表上运行。

执行所需操作的基本查询序列就是这个。

START TRANSACTION;
SET @time := NOW() - INTERVAL 24 HOUR;
INSERT INTO archive_log
SELECT * 
  FROM live_log
 WHERE  timestamp <= @time;
DELETE FROM live_log WHERE timestamp <= @time;
COMMIT;

您可以根据需要经常运行此操作。每次运行它时,您都会将旧记录从live_log表移动到archive_log表。短语- INTERVAL 24 HOUR控制着记录移动它们的年龄。

您可以将其作为MySQL事件运行。为此,必须在MySQL服务器中启用事件调度。读这个。 https://dev.mysql.com/doc/refman/5.6/en/events-configuration.html

以下是您宣布此活动的方式。

CREATE EVENT `archiver` 
    ON SCHEDULE EVERY 4 HOUR
    STARTS '2015-05-23 15:11:23'
    ON COMPLETION PRESERVE DO 
BEGIN
    START TRANSACTION;
    SET @time := NOW() - INTERVAL 24 HOUR;
    INSERT INTO archive_log
    SELECT * 
      FROM live_log
     WHERE  timestamp <= @time;
    DELETE FROM live_log WHERE timestamp <= @time;
    COMMIT;
END

请注意,查询嵌入在CREATE EVENT代码中。在将查询放入事件之前先调试查询,因为调试事件很难。