2010-08-08 19 views
41

Tengo un campo de marca de tiempo en mi tabla. ¿Cómo elimino registros de más de 10 minutos de antigüedad?MySQL: Eliminar todas las filas anteriores a 10 minutos

intentado esto:

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

no funcionó. ¿Qué estoy haciendo mal?

EDIT: He utilizado este código:

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

Pero curiosamente, esto da un resultado erróneo demasiado

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

¿Cuáles son los tipos de sus campos? – zneak

+0

id [int (11)], time_created [timestamp] – HyderA

+0

¿'SELECT DATE_SUB (CURRENT_TIME(), INTERVAL 10 MINUTE)' devuelve lo que espera? Si no, verifique la hora del servidor. – Oded

Respuesta

106

Si time_created es una marca de tiempo Unix (int), debería ser capaz de utilizar algo como esto:

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

(600 segundos = 10 minutos - obviamente)

De lo contrario (si es time_created marca de tiempo MySQL), podría intentar esto:

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

No estoy seguro de si eso funciona bien, UNIX_TIMESTAMP() muestra el número, supongo que en milisegundos y el campo time_create [timestamp] muestra la hora como el 2010-08-01 11:22:29 – HyderA

+0

segundo código tampoco funciona. – HyderA

+0

Hmm ... Pruebe 'SELECT time_created, (NOW() - INTERVALO 10 MINUTOS), DATE_SUB (CURRENT_TIME(), INTERVALO 10 MINUTOS) de bloqueos;' ¿Alguno de ellos proporciona resultados comparables? En mi experiencia, el del medio le dará una marca de tiempo mysql, mientras que el último devuelve 'NULL'. –

20

La respuesta se encuentra en el MYSQL manual itself.

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

¡Esta debería ser la respuesta aceptada! – plocks

+0

Una respuesta similar está en la parte superior con la cantidad correcta y con una alternativa. Supongo que es correcto y la mejor respuesta es diferente – zardilior

+1

"INTERVALO-QUIEZ" debe ser "INTERVALO -1 HORA" – Sofox

Cuestiones relacionadas