删除MySQL中的动态托管表

时间:2010-11-18 06:34:54

标签: mysql sql

我有一个包含许多表的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; 

1 个答案:

答案 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';

根据alexandre评论更新

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;