2013-04-27 120 views

回答

11

使用文件你可以建立多个列出的表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; 
+0

这一个似乎工作。谢谢Devart! – ARMAGEDDON 2013-05-01 12:13:50

+0

超级代码 - 并结合IN()你也可以保留多个表 – Antony 2017-03-24 15:37:00

+0

@Devart如何检查变量表的空值 – 2017-08-01 10:13:23

4

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

你的情况最简单的就是导出你想保留的表(使用像mysqldump这样的工具),然后删除并重新创建数据库。

+0

我的表是如此之大,我不希望它导出。然后单独放置每个表格会更容易。 – ARMAGEDDON 2013-04-27 10:55:53

+1

然后你应该看看这个问题:http://stackoverflow.com/questions/1454328/is-there-a-mysql-command-to-implement-something-like-drop-tables-except-t1-b2 – 2013-04-27 10:56:28

0

您可订做下降报表输出他们的信息文件,之后

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; 
1

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

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

删除他们很容易在那里?这是我做的,它似乎工作

+1

如果所有的表都是MyISAM表,它将会工作。如果数据库有InnoDB表,那么它不会那么容易...... – GregD 2013-04-27 12:48:35

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] 
相关问题