我在需要删除大量数据库的服务器上运行mySQL(在对服务器进行一些测试之后)。我需要删除的所有数据库都具有相同的前缀“ Whatever_”。
在前缀之后,名称是随机的。因此,您拥有了Whatever_something,Whatever_232,Whatever_blabla,....,Whatever_imthelast。
我会做很多次这项工作,所以我想知道这样做的最佳方法是什么?
编辑: 我可以使用任何一种语言或mysql的插件…所以我们可以以某种方式做到这一点。现在,我问正在生成数据库的那个人给我一个.txt,其中每个名称都在一行中…所以我正在编码一个快速的php,它将取一个文件并删除其中的所有数据库,稍后我将尝试%答案(如果可行,则可以确定正确答案,以确保采用更简单的方法)。无论如何,我想以更简单的方式来执行此操作,因为我将无法支持此代码(其他人也会,而且您知道…)
编辑2: 使用通配符无效:#1008-无法删除数据库“ whatever_%”;数据库不存在
基本思想是在数据库中运行“显示表”,并使用从中获得的结果来选择所需的表。我认为MySQL无法让您使用“显示表”的结果集执行任何操作,但我可能错了。
这是使用shell的快捷解决方案:
mysql -u your_user -D your_database_name -e "show tables" -s | egrep "^Whatever_" | xargs -I "@@" echo mysql -u your_user -D your_database_name -e "DROP TABLE @@"
这将打印出所有shell命令,以删除以“ Whatever_”开头的表。如果您希望它实际执行这些命令,请删除单词“ echo”。
编辑 :我忘了解释以上!我不知道您对Shell脚本的熟悉程度,但是可以这样:
mysql -u your_user -D your_database_name -e "show tables" -s
打印出所有表的列表,标题为“ Tables_in_your_database_name”。该命令的输出通过下一条命令通过管道传递(|符号表示“ piped”,如传递的一样):
egrep "^Whatever_"
搜索单词“ Whatever_”开头的任何行(^符号表示“存在于”),仅打印这些行。最后,我们通过以下命令通过管道传递“ Whatever_ *”表的列表:
xargs -I "@@" echo mysql -u your_user -D your_database_name -e "DROP TABLE @@"
它采用表名称列表中的每一行,并将其插入而不是命令中的“ @@”
echo mysql -u your_user -D your_database_name -e "DROP TABLE @@"
因此,如果您有一堆名为“ Whatever_1”,“ Whatever_2”,“ Whatever_3”的表,则生成的命令将是:
echo mysql -u your_user -D your_database_name -e "DROP TABLE Whatever_1" echo mysql -u your_user -D your_database_name -e "DROP TABLE Whatever_2" echo mysql -u your_user -D your_database_name -e "DROP TABLE Whatever_3"
将输出以下内容:
mysql -u your_user -D your_database_name -e "DROP TABLE Whatever_1" mysql -u your_user -D your_database_name -e "DROP TABLE Whatever_2" mysql -u your_user -D your_database_name -e "DROP TABLE Whatever_3"
我希望这是足够的细节,而且我不只是要用太多的信息来殴打任何头上的人。祝您好运,并在使用“ DROP TABLE”命令时要当心!