删除跨多个数据库的表

问题描述:

有没有办法使用MYSQL跨多个数据库删除表?我正在使用Sequel Pro,但在GUI中看不到任何选项来执行此操作,因此我想知道是否有某种可以执行此操作的命令?删除跨多个数据库的表

表名在所有数据库中都是相同的,并且逐个删除它们是非常耗时的。这将有助于清理数据库,因为我们有数百个数据库,并且它们都共享相同的表。但是,一些表格不再需要,需要删除。

希望有人可以帮助查询这样做。

+0

您可以从信息架构中获取表格的数据库列表,使用该语句编写drop table语句并在下一个循环中执行它们。 –

+0

你是什么意思跨数据库?你可以删除表名,特别是即使你想使用它的循环。无论如果你想删除该特定数据库中的所有表 –

+0

我指的是跨多个数据库删除同一个表。比如说,你有200个数据库都有相同的表结构,你不再需要几张表。我询问如何获取所有数据库和表的列表,并在所有这些数据库上运行删除表。 – Cole

您需要为每个表运行单独的DROP语句。

我们可以查询INFORMATION_SCHEMA.TABLES获得表的列表...

SELECT t.table_schema, t.table_name 
    FROM information_schema.tables t 
WHERE t.table_name = 'tablename_i_want_to_drop' 
    AND t.table_schema NOT IN ('mysql','information_schema','performance_schema') 
ORDER BY t.table_schema, t.table_name 

而且我们可以使用表达式来代替列...

SELECT CONCAT('DROP TABLE `',t.table_schema,'`.`',t.table_name,'` ;') AS `-- stmt` 
    FROM ... 

然后我们可以该结果集并保存它,并从脚本执行语句。 MySQL命令行客户端可以让我们获得一个脚本...

https://dev.mysql.com/doc/refman/5.7/en/mysql-batch-commands.html

您正在使用可能有类似的功能,执行脚本的客户端。或者以某种方式复制结果集并将其粘贴到查询窗口中。


在MySQL存储程序,我们可以运行相同的查询(以获得表的列表),然后循环的(使用光标),并且准备,执行和释放准备执行“DROP TABLE “声明。这是一个选项,但对于一次性拍摄,创建脚本会更容易。

+0

*脚本非常适合获取列表输出。我可以导出该列表或在Sequel Pro中轻松复制它。你能详细说明一下这个脚本会是什么样子,或者我可以通过替换第一行来运行第二部分,它将执行与脚本相同的内容吗? – Cole

+0

运行SELECT语句只会生成结果集。结果恰好是一组DROP语句。 (我只是使用SQL来生成SQL。)这是两步过程,1)生成DROP语句,2)作为一个单独的步骤。执行DROP语句。我们需要一个客户端程序来做到这一点...... 1)运行SELECT并且2)执行DROP语句。通过一次调用数据库服务器来完成这项工作的唯一方法就是调用MySQL存储过程。该程序将由客户执行两个步骤。 (显然,我们首先必须编写该程序。) – spencer7593

+0

这很好。我能够轻松地粘贴第一个命令,以获得在后续pro的查询部分的拖放语句。复制drop语句并将其粘贴到新的查询区域后,我可以运行它并运行每个查询并删除表格。感谢您的帮助。 – Cole