Как одним запросом удалить несколько таблиц?

spiderbuber

Гуру форума
Заблокирован
Регистрация
20 Июл 2009
Сообщения
237
Реакции
59
  • Автор темы
  • Заблокирован
  • #1
В БД MySQL ежедневно создаются таблицы с логами. Имена таблиц выглядят так:
logs_2012_05_12
logs_2012_05_13
logs_2012_05_14

Каким SQL запросом можно удалить все таблицы дата которых меньше сегодняшней? Т.е. таблица logs_2012_05_14 должна остаться (до завтра), а все остальные удалиться..
 
Для одного запроса боюсь нужно будет писать хранимую процедуру.
Получить список таблиц можно запросом:

Код:
SELECT
  `information_schema`.`tables`.`table_name`
FROM
  `information_schema`.`tables`
WHERE
  update_time < date_sub(NOW(), INTERVAL 1 DAY)
Далее можно объединить их, например, через запятую
и удалить вторым запросом
Код:
DROP TABLE tbl_name_1, table_name_2, ...
 
  • Автор темы
  • Заблокирован
  • #3
Проблема в том, что таблицы должны дропаться автоматом (крон). И удалять нужно не все таблицы младше сегодняшнего дня, а с конкретными именами..
 
Проблема в том, что таблицы должны дропаться автоматом (крон). И удалять нужно не все таблицы младше сегодняшнего дня, а с конкретными именами..
Кроном можно запустить, например, php- или bash-скрипт. Для удаления таблиц с определенными именами можно чуть изменить запрос:
Код:
SELECT
  `table_name`
FROM
  `information_schema`.`tables`
WHERE
  update_time < date_sub(NOW(), INTERVAL 1 DAY)
AND
  `table_name` LIKE "logs\_____\___\___"
 
  • Автор темы
  • Заблокирован
  • #5
Спасибо за старания, но так и не смог разобраться..
Решил удалять таблицу вчерашней даты так:
drop table logs_'.date("Y_m_d", (strtotime($var['date']) - 86400)).';

ЗЫ: Но всё-таки интересен вопрос как удалить все таблицы с датой меньше сегодняшней..
 
Назад
Сверху