1

我想删除数据库中几乎所有的表(总共 9000 个)。不要问我为什么他们这么多,解释太长了。

所以我有 3 张表我不想放弃。

我可以使用什么 SQL 语句来执行此操作?我已经用谷歌搜索了一段时间,但没有任何结果!

所以我有这样的想法(在 PHP 中):

foreach($tab as $tableList){
if($tab!='foo'&&$tab!='bar'&&$tab!='foofoobar')
mysql_query('DROP TABLE '.$tab);
}

有任何想法吗?如果一切都可以是一个mysql语句,那就更好了!

4

3 回答 3

3
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'db_name'

将为您提供数据库“db_name”中的所有表。

不要忘记在运行DROP语句之前备份您的表。

您可以使用 PHP 执行 DROP 语句或动态 SQL,如下所示:

(从这个问题复制:Deleting-dynamically-managed-tables-in-mysql

SET @v = ( SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(it.table_name) )
           FROM information_schema.tables it 
           WHERE it.table_name NOT IN ('TableToKeep_1', 'Keep_2', 'Keep_3')
             AND it.table_schema = 'db_name' ;
         ) ;
PREPARE stDropTables FROM @v; 
EXECUTE stDropTables ;
于 2011-07-07T00:08:15.500 回答
2

您可以使用逗号一次删除多个表。

     DROP TABLE table_1, table_2, etc;
于 2011-07-06T23:47:39.477 回答
2

从你的PHP代码中,我认为你应该使用OR不和......

foreach($tab as $tableList){
if($tab!='foo'|| $tab!='bar' || $tab!='3rdtablename')
mysql_query('DROP TABLE '.$tab);
}

原因很明显。

好吧,如果你想在 MySQL 中做,

您可以先列出所有表格...使用

show tables > whateverfile.txt

并存储在文件中...根据需要编辑文件...即删除不应删除的表的名称并添加DROP TABLE到文件的第一行,并在Mysql中执行... mysql < whateverfile.txt....

于 2011-07-06T23:55:12.923 回答