SQL遍历表并删除如果不是特定名称

Posted

技术标签:

【中文标题】SQL遍历表并删除如果不是特定名称【英文标题】:SQL iterate through tables and drop if not certain name 【发布时间】:2011-07-06 23:39:28 【问题描述】:

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

所以我有 3 个表我不想删除。

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

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

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

有什么想法吗?如果都是mysql语句就更好了!

【问题讨论】:

【参考方案1】:
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 ;

【讨论】:

好的,所以动态 sql 语句对我来说是无法控制的......现在我可以使用第一个语句来列出表,然后使用 php 删除某些表?.. . 好的,我会尝试再次感谢您的建议! @Andrei:请注意,您不必为每个表都执行DROP tableX ;。你也可以DROP table1, table2, ..., tableN ; 但我想在 PHP 循环中运行 9000 DROP 不会有问题。也许更好,所以你可以捕捉到错误,比如由于某种原因 DROP 失败。 是的,感谢您指出这一点!我现在正在编辑我的 php 循环以删除表。再次感谢!感谢您的帮助!【参考方案2】:

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

     DROP TABLE table_1, table_2, etc;

【讨论】:

Andrei,该子句将不包括您需要删除的表 :) 如果有任何内容,请获取所有表的列表并在将有问题的表传递给 DROP TABLE (...) 是的,这正是我的管理方式!感谢您的评论,现在已经完成了,我已经完成了!【参考方案3】:

来自你的 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....

【讨论】:

感谢您对文件的解决方案!我会试试这个!虽然,你在这里给我的 php 代码并不好,因为使用 OR 运算符,'foo' 和 'bar' 表都将被删除 - 重新考虑条件! - 无论如何,感谢您的解决方案!干杯!

以上是关于SQL遍历表并删除如果不是特定名称的主要内容,如果未能解决你的问题,请参考以下文章

遍历数据透视表并删除相同的值

DataTables 循环遍历表并删除特定列中包含特定字符串的所有行

遍历文件夹内的特定子文件夹并删除包含特定名称的文件 - AIX

SQL SELECT 名称 LIKE $name 但不完全相同的名称两次

VBA excel添加新工作表并删除原来的

遍历表并在 js/jquery 中创建一个数组