我有一個表格用於存儲一些日期的條目,我把它放在「日期時間」類型的字段。 我想在那時自動移動這些條目到另一個表。 結果將會有一個包含所有通過條目的表格,以及一個包含未來條目的表格。如何循環刪除我的數據庫中的條目?
我正在考慮使用存儲過程,但我不知道如何在需要時觸發它們。 也許我需要一個獨立的應用程序,始終在我的服務器上運行。 或者,也許我只是沒有想到的權利,平庸的解決方案...
我有一個表格用於存儲一些日期的條目,我把它放在「日期時間」類型的字段。 我想在那時自動移動這些條目到另一個表。 結果將會有一個包含所有通過條目的表格,以及一個包含未來條目的表格。如何循環刪除我的數據庫中的條目?
我正在考慮使用存儲過程,但我不知道如何在需要時觸發它們。 也許我需要一個獨立的應用程序,始終在我的服務器上運行。 或者,也許我只是沒有想到的權利,平庸的解決方案...
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
代碼。在將事件放入事件之前,先調試查詢,因爲調試事件很難。