2012-12-31 94 views
12

我想在7天后從我的MySQL數據庫中刪除一些消息。如何在特定時間後刪除MySQL記錄

我的消息錶行具有以下格式: id |消息|日期

日期是正常格式的時間戳; 2012-12-29 17:14:53

我在想MySQL的事件是要走的路而不是cron的工作。

我有什麼我想是一個有經驗的SQL人員的簡單問題,我如何編碼刪除消息部分在下面的括號?

一個例子將不勝感激,謝謝。

DELIMITER $$ 
    CREATE EVENT delete_event 
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY 
    ON COMPLETION PRESERVE 
    DO 
    BEGIN 
     DELETE messages WHERE date >= (the current date - 7 days); 
    END; 
$$; 

回答

14

您可以嘗試使用此條件:

WHERE date < DATE_SUB(NOW(), INTERVAL 7 DAY) 

使整個SQL腳本是這樣的:

CREATE EVENT delete_event 
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY 
ON COMPLETION PRESERVE 

DO BEGIN 
     DELETE messages WHERE date < DATE_SUB(NOW(), INTERVAL 7 DAY); 
END; 

然而,在你的地方,我會解決給定的問題一個簡單的cron腳本。這樣做的原因很簡單:維護代碼更容易,沒有醜陋的SQL解決方法,可以與系統平穩集成。

+0

感謝您輸入Jordan,我遇到的問題是我對Cron腳本毫無所知。但我確實意識到事件在MySQL線程上運行可能有點不利 – Mike

7

這應該有所斬斷。

DELETE FROM messages WHERE date < (CURDATE() - INTERVAL 7 DAY); 
+0

謝謝@Michael Mior,我只是試了一下,它工作正常 – Mike

+0

當然較少的時間間隔:-) – Mike

+0

很高興幫助: ) –

2

對於那些在那裏誰是一個共享的主機,喜歡的1and1的,且不能創建活動,另一種是使用webcron

你只需要告訴webcron PHP腳本,你會的網址喜歡跑,他們會觸發它在你想要的間隔