2015-05-23 58 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代碼。在將事件放入事件之前,先調試查詢,因爲調試事件很難。

相關問題