最基本的想法是在数据库中运行“show tables”,并使用其中的结果来选择你想要的 表。我不认为MySQL可以让你对“show tables”, 的结果集做任何事情,但我可能是错的。
下面是使用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”。从该输出通过管道(|符号的意思是“管道”,如在传入上)至下一个命令:
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”命令时要小心!
与我一样,它不会在`-e`后输出引号(```),它会输出这样的行:`mysql -u root -D joomla_test -e DROP TABLE bak_xlr1q_weblinks` using your exact bash script。I'm using Bash 4.1.5(1)-release。 – Hubro 2013-02-27 19:48:16
@Codemonkey为了让引号出现,你可以将它们转义。用`\ DROP TABLE @@“替换` “DROP TABLE @@ \”` – scraimer 2013-02-28 09:35:28