Олег Букатчук

Удалить несколько таблиц по маске в MySQL

Мар
09

Привет, большинство современных движков при установке в базу создают «префикс» для каждой своей таблицы. Бывают случаи, что движок удален, таблиц от данной инсталляции висит много, а базу не удалишь, поскольку таблицы с другим префиксом используются. Удалять по-одной — довольно нудное и длительное занятие. В общем, как массово удилить таблицы «по маске» привожу ниже.

Получить список таблиц по маске:

SELECT `TABLE_NAME` FROM information_schema.`TABLES` WHERE `TABLE_SCHEMA`='testbase' AND TABLE_NAME LIKE 'oc_%';

или, более короткий вариант:

SHOW FULL TABLES FROM `testbase` LIKE 'oc_%';

Сообветственно, вместо testbase впишите название своей базы.

Теперь, обещанное, как удалить «по маске»:

Выполняем SELECT: (опять же, вместо testbase — название своей базы, вместо «prefix_» — название своего префикса, знак процент «%» не убирайте (кто знаком с sql — знают почему, если же Вы совсем новичек, то в скором времени узнаете вместе с опытом))

SELECT 

  CONCAT(

    "DROP TABLE ",  

    GROUP_CONCAT(

      CONCAT(TABLE_NAME, "\n")

    )

  ) AS stmt 

FROM information_schema.TABLES 

WHERE TABLE_SCHEMA = "testbase" AND TABLE_NAME LIKE "prefix_%";

В результате выведется сформированный запрос на удаление всех таблиц, подходящих условию «prefix_», «\n» здесь используется для того, чтобы переносить названия таблиц (так нагляднее), его можно удалить, оставив пустые кавычки. Получившийся запрос — копируем в буфер обмена и вставляем обратно в консоль (или чем вы пользуетесь для выполнения SQL-запросов).

Не забудьте ;

Все, нажимаем enter, таблицы «по маске» удалены из базы «testbase».