我有一个表格用于存储一些日期的条目,我把它放在“日期时间”类型的字段。 我想在那时自动移动这些条目到另一个表。 结果将会有一个包含所有通过条目的表格,以及一个包含未来条目的表格。如何循环删除我的数据库中的条目?
我正在考虑使用存储过程,但我不知道如何在需要时触发它们。 也许我需要一个独立的应用程序,始终在我的服务器上运行。 或者,也许我只是没有想到的权利,平庸的解决方案...
我有一个表格用于存储一些日期的条目,我把它放在“日期时间”类型的字段。 我想在那时自动移动这些条目到另一个表。 结果将会有一个包含所有通过条目的表格,以及一个包含未来条目的表格。如何循环删除我的数据库中的条目?
我正在考虑使用存储过程,但我不知道如何在需要时触发它们。 也许我需要一个独立的应用程序,始终在我的服务器上运行。 或者,也许我只是没有想到的权利,平庸的解决方案...
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
代码。在将事件放入事件之前,先调试查询,因为调试事件很难。