MySQL: удалить все строки старше 10 минут

39

У меня есть поле timestamp в моей таблице. Как удалить записи старше 10 минут?

Пробовал это:

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

Не работает. Что я делаю неправильно?

EDIT: я использовал этот код:

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
    Какие типы ваших полей?
  • 0
    id [int (11)], time_created [timestamp]
Показать ещё 6 комментариев
Теги:
datetime

2 ответа

109
Лучший ответ

Если time_created - это временная метка unix (int), вы должны иметь возможность использовать что-то вроде этого:

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

(600 секунд = 10 минут - очевидно)

В противном случае (если time_created - timestamp mysql), вы можете попробовать следующее:

DELETE FROM locks WHERE time_created < (NOW() - INTERVAL 10 MINUTE)
  • 0
    Не уверен, что это работает правильно, UNIX_TIMESTAMP () выводит число, я думаю, в миллисекундах, а поле time_create [timestamp] показывает время как 2010-08-01 11:22:29
  • 0
    Второй код тоже не работает.
Показать ещё 2 комментария
18

Ответ правильный в самом руководстве MYSQL.

"DELETE FROM `table_name` WHERE `time_col` < ADDDATE(NOW(), INTERVAL -1 HOUR)"
  • 1
    Это должен быть принятый ответ!
  • 0
    Подобный ответ на вершине с правильным количеством и с альтернативой. Угадай правильный и лучший ответ разные
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню