我有一个包含许多表的MySQL数据库,其中一些是由软件动态创建的。动态表具有一致的命名方案:
dynamic_1
dynamic_2
...
但是,我不一定知道有多少这些表。
我希望能够在不删除整个数据库的情况下删除所有这些动态表。我希望能够在SQL中完全执行此操作。 (存储过程没问题。)这是否可能?
快速补遗。
Haim和Alexandre的解决方案效果很好,但有一个特殊情况我们都错过了。如果有没有动态表怎么办?在这种情况下,@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;
答案 0 :(得分:3)
您可以运行此查询并获取您需要运行的所有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;