SQL迭代表,如果不是某个名称则删除

时间:2011-07-06 23:39:29

标签: php mysql sql drop-table

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

所以我有3张桌子,我不想放弃。

我可以使用哪种SQL语句来执行此操作? 我已经谷歌了一段时间但没有出现!

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

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

有什么想法吗?如果所有这些都可以成为一个mysql语句,那就更好了!

3 个答案:

答案 0 :(得分: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 ;

答案 1 :(得分:2)

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

     DROP TABLE table_1, table_2, etc;

答案 2 :(得分:2)

你的PHP代码,我认为你应该使用OR而不是AND ...

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 ....