在 MySql 中删除除一个表之外的所有表

10

我有100张数据表,我只想保留其中一张。

我尝试了以下查询语句:

DROP ALL TABLES EXCEPT my_table

但是好像不存在这样的东西。有什么想法吗?
6个回答

16

您可以使用列出多个表的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;

超级棒的代码 - 并结合 IN () 可以同时保留多个表。 - Antony
@Devart 如何检查变量表是否为空。 - Ruchita Sheth

4

在MySQL中,您无法删除多个表。

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


我的表格太大了,我不想导出它。这样单独删除每个表格会更容易。 - ARMAGEDDON
1
那么您应该看一下这个问题:http://stackoverflow.com/questions/1454328/is-there-a-mysql-command-to-implement-something-like-drop-tables-except-t1-b2 - Wander Nauta

1

1
我想知道为什么没有人建议去目录
C:\Program Files (x86)\Parallels\Plesk\Databases\MySQL\data\user_db\...

你希望在那里轻松地进行删除操作?这就是我所做的,看起来很有效。


1
如果所有的表都是MyISAM表,那么它会起作用。但是,如果数据库有InnoDB表,那么情况就不那么简单了... - GregD

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;

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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接