задание по удалению строк старше 3 месяцев в базе данных mysql - PullRequest
15 голосов
/ 02 мая 2009

Мы используем сервер mysql в качестве централизованной системы ведения журналов, и я хочу получить задание регулярно удалять / очищать записи таблицы, возраст которых превышает 3 месяца. Каков наилучший способ сделать это?

Заранее спасибо.

-hinling

Ответы [ 4 ]

68 голосов
/ 02 мая 2009

Сохраняете ли вы дату создания элемента в поле?

Если это так,

DELETE FROM myTable WHERE dateEntered < DATE_SUB(NOW(), INTERVAL 3 MONTH);

должно работать ...

Вы можете запустить его в запланированном задании / задании cron ...

4 голосов
/ 02 мая 2009

MySQL 5.1 поддерживает События . Я на самом деле не использовал их сам, поэтому я не буду ручаться за них. Однако, если все, что вы хотите сделать, - это запускать оператор DELETE на регулярной основе, я думаю, что он будет работать достаточно хорошо.

2 голосов
/ 02 мая 2009

Простым способом было бы запланировать задание, которое выполняется каждую ночь и которое вызывает хранимую процедуру, чтобы удалить все строки старше трех месяцев. В зависимости от вашего O / S это должно быть легко сделать. Делайте это каждую ночь, и количество удаленных данных будет не таким большим, как раз в месяц.

У меня также в прошлом был код в моем SP, который вставлял данные для удаления ненужных данных в то время, так что в основном каждый раз, когда вставляется строка, сразу после вставки в запускался процесс очистки сделал немного обслуживания. Это не будет моим первым выбором, но это выполнимо, если количество вставок мало, и удаление может быть сделано быстро (вы не хотите замедлять пользователя). Приятным побочным эффектом является то, что данные всегда чистые (т.е. все данные всегда <= 3 месяца), но не уверены, имеет ли это значение в вашем приложении. </p>

Вам следует также рассмотреть возможность архивирования строк в другой таблице вместо того, чтобы удалять их, если есть любой шанс, что вы когда-нибудь захотите получить данные для другой цели. Я всегда делаю это, и вы будете удивлены, каким героем вы будете выглядеть, когда какой-то менеджер, который даже не знает, что вы сохраняете данные, внезапно срочно нуждается в этом .... и вы можете доставить за них.

0 голосов
/ 02 мая 2009

Перефразируя ваш вопрос: «У меня есть код, который не зависит от клиента, который я хочу запустить в базе данных несколько раз, и мне не нужно видеть вывод», тогда ответ «записать сохраненный proc и регулярно вызывайте его у любого клиента ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...