基本思路是在数据库中运行 "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 @@"
这将打印出所有以“Whatever_”开头的表的Shell命令。如果你想要实际执行这些命令,请删除单词“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”命令时小心!
"
)后面的内容。它会输出这样的行:mysql -u root -D joomla_test -e DROP TABLE bak_xlr1q_weblinks
。我正在使用Bash 4.1.5(1)-release版本。 - Hubro"DROP TABLE @@"
替换为\"DROP TABLE @@\"
。 - Shalom Craimerprintf
而不是echo
,以避免引号等方面的不一致行为。但这只是小问题 :) - Anders Martini