我有一个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; 发布于 2010-11-18 06:43:15
您可以运行此查询并获取运行所需的所有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;https://stackoverflow.com/questions/4212229
复制相似问题