3

我将使用 MySQL 的什么语法来删除与它们具有相似模式的多个表?就像是:

DROP TABLES FROM `Database1` LIKE "SubTable*"

4

4 回答 4

4

由于准备好的语句支持 DROP TABLE,因此可以通过这种方式完成 -

SET @tables = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables FROM information_schema.tables 
  WHERE table_schema = 'Database1' AND table_name LIKE 'SubTable%';

SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt1 FROM @tables;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
于 2011-03-25T08:28:10.033 回答
3

正如在这个问题上所指出的,如果不首先增加 group_concat 的限制,此处给出的响应(Angelin 和 Devart)将不会在所有情况下都起作用,如下所示:

SET group_concat_max_len = 1024 * 1024 * 10;
于 2013-10-09T21:38:17.277 回答
1

information_schema不,但是您可以从数据库中选择表名:

select table_name
  from information_schema.tables
 where table_schema = 'Database1'
   and table_name like 'SubTable%'

然后迭代结果集中的表名并删除它们

于 2011-02-10T14:41:45.730 回答
0

mysql> SELECT CONCAT("DROP TABLE", GROUP_CONCAT(TABLE_NAME)) AS stmt

FROM information_schema.TABLES

WHERE TABLE_SCHEMA = "your_db_name" AND TABLE_NAME LIKE "ur condition" into outfile '/tmp/a.txt';

mysql>源/tmp/a.txt;

于 2012-08-23T07:58:02.847 回答