我想删除数据库中的几乎所有表(总共9000个)。 不要问我为什么这么多,太长时间无法解释。
所以我有3张桌子,我不想放弃。
我可以使用哪种SQL语句来执行此操作? 我已经谷歌了一段时间但没有出现!
所以我有这样的想法(在PHP中):
foreach($tab as $tableList){
if($tab!='foo'&&$tab!='bar'&&$tab!='foofoobar')
mysql_query('DROP TABLE '.$tab);
}
有什么想法吗?如果所有这些都可以成为一个mysql语句,那就更好了!
答案 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
....