2010-08-08 35 views
41

我的表中有一個時間戳字段。如何刪除10分鐘以前的記錄?MySQL:刪除所有超過10分鐘的行

嘗試這樣:

DELETE FROM locks WHERE time_created < DATE_SUB(CURRENT_TIME(), INTERVAL 10 MINUTE) 

沒有工作。我究竟做錯了什麼?

編輯:我用這個代碼:

SELECT time_created, CURRENT_TIMESTAMP, TIMESTAMPDIFF(MINUTE, time_created, CURRENT_TIMESTAMP) FROM locks 

但奇怪的是,這給了錯誤的結果太

time_created   CURRENT_TIMESTAMP  TIMESTAMPDIFF(MINUTE, time_created,  CURRENT_TIMESTAMP) 
2010-08-01 11:22:29 2010-08-08 12:00:48 10118 
2010-08-01 11:23:03 2010-08-08 12:00:48 10117
+2

什麼是您的字段類型? – zneak 2010-08-08 07:30:00

+0

id [int(11)],time_created [timestamp] – HyderA 2010-08-08 07:31:44

+0

'SELECT DATE_SUB(CURRENT_TIME(),INTERVAL 10 MINUTE)'返回你期望的結果嗎?如果沒有,請檢查服務器時間。 – Oded 2010-08-08 07:33:41

回答

106

如果TIME_CREATED是UNIX時間戳(INT),你應該能夠使用像這樣:

DELETE FROM locks WHERE time_created < (UNIX_TIMESTAMP() - 600); 

(600秒= 10分鐘 - 顯然)

否則(如果TIME_CREATED是MySQL的時間戳),你可以試試這個:

DELETE FROM locks WHERE time_created < (NOW() - INTERVAL 10 MINUTE) 
+0

不知道這是否正常,UNIX_TIMESTAMP()輸出數量,我猜測以毫秒爲單位,time_create [timestamp]字段顯示時間爲2010-08-01 11:22:29 – HyderA 2010-08-08 07:46:07

+0

第二個代碼也不起作用。 – HyderA 2010-08-08 08:00:21

+0

嗯...嘗試'從鎖中SELECT time_created,(NOW() - INTERVAL 10 MINUTE),DATE_SUB(CURRENT_TIME(),INTERVAL 10 MINUTE);'它們中的任何一個是否提供可比較的結果?在我的經驗中,中間會給你一個MySQL時間戳,而最後一個返回NULL。 – 2010-08-08 08:25:16

20

的答案是正確的MYSQL manual itself

"DELETE FROM `table_name` WHERE `time_col` < ADDDATE(NOW(), INTERVAL -1 HOUR)" 
+1

這應該是被接受的答案! – plocks 2016-03-31 08:49:03

+0

類似的答案是正確的數量和替代方案。猜猜正確和最好的答案是不同的 – zardilior 2016-07-21 19:29:08

+1

「INTERVAL -1HOUR」應該是「INTERVAL -1 HOUR」 – Sofox 2017-02-14 18:55:09