УБРАТЬ всю таблицу с указанным префиксом c name - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть база данных, в которой хранятся старые установочные таблицы WordPress. Я хотел бы немного очиститься, поэтому я ищу запрос может удалить таблицу на основе имени таблицы префиксов.

В этом случае я хочу удалить все таблицы, которые начинаются с "_wordpress_1 _"

   _wordpress_1_eruiweuriw
   _wordpress_2_jshfiojdwi
   _wordpress_1_fksdjfksdj
   _wordpress_1_fskdjfksdf
   _wordpress_3_kfsjdfsdkf

Итак, я пытаюсь:

 USE database_name;
 SELECT * FROM database_name WHERE TABLE_NAME LIKE '%_wordpress_1_%';

Я думаю, я не могу использовать как в выражении where для имени таблицы, но только для столбца таблицы ?? Могу ли я получить какие-либо советы о том, как этого добиться?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020
CREATE PROCEDURE drop_all_tables (IN dbase TEXT, IN prefix TEXT)
BEGIN
SELECT CONCAT('DROP TABLE ', GROUP_CONCAT(table_name))
INTO @sql
FROM information_schema.tables 
WHERE table_schema = dbase 
  AND table_name LIKE CONCAT(prefix, '%');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DROP PREPARE stmt;
-- and now cry if you make a mistake in parameters
END

затем

CALL drop_all_tables ('wordpress_database', '_wordpress_1_');
0 голосов
/ 26 февраля 2020

вы не можете сделать это только с помощью одной MySQL команды, вы можете использовать MySQL для создания оператора:

В оболочке MySQL или PHPMyAdmin вставьте следующий запрос с изменением префикса:

SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' ) 
AS statement FROM information_schema.tables 
WHERE table_name LIKE '_wordpress_1_%';

Это сгенерирует оператор DROP, который вы можете затем скопировать и выполнить для удаления таблиц.

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