Operations

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

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

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

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”.