MySQL « Удаление таблиц по маске
Стоит мультиюзерный WordPress. У некоторых пользователей стоял плагин, который создавал по три таблицы вида:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .ini.geshi_code {font-family:monospace;} .ini.geshi_code .imp {font-weight: bold; color: red;} .ini.geshi_code .co0 {color: #666666; font-style: italic;} .ini.geshi_code .sy0 {color: #000066; font-weight:bold;} .ini.geshi_code .st0 {color: #933;} .ini.geshi_code .re0 {color: #000066; font-weight:bold;} .ini.geshi_code .re1 {color: #000099;} .ini.geshi_code .re2 {color: #660066;} .ini.geshi_code span.xtra { display:block; }
wp_1_myStat_data
wp_1_myStat_dbsize
wp_1_myStat_main
где 1 - это номер блога. Поясню, что в мультиюзерном WP на каждый зарегистрированный в системе блог создается пачка таблиц как для отдельного WP-блога с тем лишь различием, что в имени присутствует номер блога (в данном случае 1).
Плагин оказался плохонький, и его решили удалить. Удалили, а таблицы остались. Теперь проблема найти все таблицы такого вида в базе (кто-то из пользователей юзал плагин, а кто-то нет) и удалить.
Подскажите пожалуйста, как это сделать.
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .ini.geshi_code {font-family:monospace;} .ini.geshi_code .imp {font-weight: bold; color: red;} .ini.geshi_code .co0 {color: #666666; font-style: italic;} .ini.geshi_code .sy0 {color: #000066; font-weight:bold;} .ini.geshi_code .st0 {color: #933;} .ini.geshi_code .re0 {color: #000066; font-weight:bold;} .ini.geshi_code .re1 {color: #000099;} .ini.geshi_code .re2 {color: #660066;} .ini.geshi_code span.xtra { display:block; }
wp_1_myStat_data
wp_1_myStat_dbsize
wp_1_myStat_main
где 1 - это номер блога. Поясню, что в мультиюзерном WP на каждый зарегистрированный в системе блог создается пачка таблиц как для отдельного WP-блога с тем лишь различием, что в имени присутствует номер блога (в данном случае 1).
Плагин оказался плохонький, и его решили удалить. Удалили, а таблицы остались. Теперь проблема найти все таблицы такого вида в базе (кто-то из пользователей юзал плагин, а кто-то нет) и удалить.
Подскажите пожалуйста, как это сделать.
1 ответов
Если бы это был PostgreSQL, и использовались схемы, то я бы посоветовал дропнуть схему. Но не судьба.
Насколько мне известно, операторы модификации схемы (CREATE, ALTER, DROP : TABLE, VIEW...) позволяют удалять только конкретный объект. Вообще говоря, на месте имён объектов не могут быть использованы строковые литералы.
Следовательно нужно прибегнуть к динамическому SQL, а именно написать скрипт на языке программирования, который обходит коллекцию имён и дропает все объекты по очереди.
В Mysql можно опросить служебную таблицу INFORMATION_SCHEMA.TABLES и получить список таблиц . что-то типа
SELECT table_schema, table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_name like 'wp_%_myStat_%'
и потом в цикле удалить каждую таблицу.