Удаление динамически управляемых таблиц в MySQL - PullRequest
1 голос
/ 18 ноября 2010

У меня есть база данных 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 Ответ

3 голосов
/ 18 ноября 2010

вы можете запустить этот запрос и получить все 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...