Удаление динамически управляемых таблиц в MySQL

У меня есть база данных MySQL, которая содержит много таблиц, некоторые из которых динамически создаются программным обеспечением. Динамические таблицы имеют согласованную схему именования:

dynamic_1  
dynamic_2  
...

Однако я не обязательно знаю, сколько таких таблиц.

Я хотел бы иметь возможность удалить все эти динамические таблицы, не удаляя всю базу данных. Я хотел бы быть в состоянии сделать это чисто в SQL. (Хранимые процедуры в порядке.) Это вообще возможно?


Быстрое приложение.

Решение от Хаима и Александра прекрасно работает, но есть один особый случай, который мы все пропустили. Что делать, если есть не динамические таблицы? В таком случае @v будет NULL и мы получим ошибку при попытке выполнить. Я добавил вторую переменную для обработки этого случая:

SET @v = (SELECT CONCAT('drop table ', GROUP_CONCAT(a.table_name)) FROM information_schema.tables a where a.table_schema = DATABASE() AND a.table_name like 'dynamic_%');
SET @y = (SELECT IF (@V IS NOT NULL, @V, 'select 1'));
PREPARE s FROM @y;
EXECUTE s; 

1 ответ

Решение

Вы можете запустить этот запрос и получить все SQL-запросы, которые вам нужно выполнить;

select concat( 'drop table ', a.table_name, ';' )
from information_schema.tables a 
where a.table_name like 'dynamic_%';

Вы можете вставить его в файл как

INTO OUTFILE '/tmp/delete.sql';

обновлять в соответствии с комментарием Александра

SET @v = ( select concat( 'drop table ', group_concat(a.table_name))
    from information_schema.tables a 
    where a.table_name like 'dynamic_%'
    AND a.table_schema = DATABASE()
;);
 PREPARE s FROM @v; 
EXECUTE s;
Другие вопросы по тегам