我想删除数据库中几乎所有的表(总共9000个)。不要问我为什么它们这么多,太长了,无法解释。
所以我有3个我不想丢弃的表。
我可以使用哪条SQL语句来执行此操作?我已经在谷歌上搜索了一段时间了,但是什么也没有找到!
所以我的脑海中有这样的东西(在PHP中):
foreach($tab as $tableList){
if($tab!='foo'&&$tab!='bar'&&$tab!='foofoobar')
mysql_query('DROP TABLE '.$tab);
}有什么想法吗?如果一切都是一条mysql语句,那就更好了!
发布于 2011-07-07 08:08:16
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'db_name'将为您提供数据库'db_name‘中的所有表。
在运行DROP语句之前,不要忘记备份您的表。
您可以使用PHP执行DROP语句或动态SQL,如下所示:
(从这个问题中复制: )
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-07 07:47:39
您可以使用逗号一次删除多个表。
DROP TABLE table_1, table_2, etc;发布于 2011-07-07 07:55:13
从你的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...
https://stackoverflow.com/questions/6604286
复制相似问题