2015-05-23 53 views
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代码。在将事件放入事件之前,先调试查询,因为调试事件很难。

相关问题