首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL遍历表,如果不是某个名称,则删除

问SQL遍历表,如果不是某个名称,则删除
EN

Stack Overflow用户
提问于 2011-07-07 07:39:29
回答 3查看 1.3K关注 0票数 1

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

所以我有3个我不想丢弃的表。

我可以使用哪条SQL语句来执行此操作?我已经在谷歌上搜索了一段时间了,但是什么也没有找到!

所以我的脑海中有这样的东西(在PHP中):

代码语言:javascript
复制
foreach($tab as $tableList){
if($tab!='foo'&&$tab!='bar'&&$tab!='foofoobar')
mysql_query('DROP TABLE '.$tab);
}

有什么想法吗?如果一切都是一条mysql语句,那就更好了!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-07 08:08:16

代码语言:javascript
复制
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'db_name'

将为您提供数据库'db_name‘中的所有表。

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

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

(从这个问题中复制: )

代码语言:javascript
复制
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 ;
票数 3
EN

Stack Overflow用户

发布于 2011-07-07 07:47:39

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

代码语言:javascript
复制
     DROP TABLE table_1, table_2, etc;
票数 2
EN

Stack Overflow用户

发布于 2011-07-07 07:55:13

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

代码语言:javascript
复制
foreach($tab as $tableList){
if($tab!='foo'|| $tab!='bar' || $tab!='3rdtablename')
mysql_query('DROP TABLE '.$tab);
}

原因很明显。

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

你可以,先列出所有的表...使用

代码语言:javascript
复制
show tables > whateverfile.txt

并存储在一个文件中。根据需要编辑文件...例如,删除不应该删除的表名称,在文件的第一行添加DROP TABLE,然后在MysQL中执行。mysql < whateverfile.txt...

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6604286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档