Удаление динамически управляемых таблиц в 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;