8

我的数据库中有 100 个表,我只想保留一个。

我尝试了类似下面的查询:

DROP ALL TABLES EXCEPT my_table

但这似乎不存在。任何想法?

4

6 回答 6

14

您可以使用多个列出的表构建 DROP TABLE 语句,并使用 MySQL 准备好的语句运行查询 -

SET @tables = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables FROM information_schema.tables 
  WHERE table_schema = 'Database1' AND table_name <> 'my_table';

SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt1 FROM @tables;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
于 2013-04-27T11:26:41.287 回答
4

您不能在 MySQL 中删除多个表。

在您的情况下,最简单的方法是导出您想要保留的表(使用类似的工具mysqldump),然后删除并重新创建数据库。

于 2013-04-27T10:53:23.833 回答
1

我想知道为什么没有人建议去目录

C:\Program Files (x86)\Parallels\Plesk\Databases\MySQL\data\user_db\...

并在那里轻松删除它们?这就是我所做的,它似乎有效

于 2013-04-27T11:31:37.177 回答
1

如果您有很多表,请注意 GROUP_CONCAT 函数的截断。它有一个返回字符串的最大长度设置:group_concat_max_len

参见:GROUP_CONCAT 参考手册条目

这个答案引导我找到解决方案: MYSQL: How to define or get LONG string variables

于 2013-12-11T17:18:20.767 回答
0

您可以构建所有 drop 语句输出它们的信息文件并在此之后使用文件

SELECT CONCAT( 'DROP TABLE ', table_name , ';' ) AS statement FROM information_schema.tables WHERE table_name not like 'table_to_keep' and table_schema like 'your_schema' into outfile 'path_to_file;
source path_to_file;
于 2013-04-27T11:11:55.180 回答
0

你可以用mysqldump,试试吧!

mysqldump -u[USERNAME] -p[PASSWORD]--add-drop-table --no-data [DATABASE] |
grep ^DROP |
grep -v 'my_table' |
mysql -u[USERNAME] -p[PASSWORD] [DATABASE]
于 2013-04-27T11:48:09.410 回答