【问题标题】:SQL iterate through tables and drop if not certain nameSQL遍历表并删除如果不是特定名称
【发布时间】: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语句就更好了!

【问题讨论】:

    标签: php mysql sql drop-table


    【解决方案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' 表都将被删除 - 重新考虑条件! - 无论如何,感谢您的解决方案!干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2015-05-29
    • 2020-05-03
    • 1970-01-01
    • 2022-11-15
    • 2019-07-29
    • 1970-01-01
    相关资源
    最近更新 更多