跨多个数据库删除 Table

Delete Table Across Multiple Databases

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

table 名称在所有数据库中都是相同的,将它们一一删除非常耗时。这确实有助于清理数据库,因为我们有数百个数据库,而且它们都共享相同的 table。但是有些table已经不需要了,需要删除。

希望有人可以帮助解决此问题。

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

我们可以查询 information_schema.tables 以获得 table 的列表...

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

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


在 MySQL 存储程序中,我们可以 运行 相同的查询(获取 table 的列表),然后循环这些(使用 CURSOR),然后PREPARE、EXECUTE 和 DEALLOCATE PREPARE 以执行 "drop table" 语句。这是一个选项,但对于一次性镜头,创建脚本会更容易。

这是 spencer7593 的“Drop query”在 Mysql 5.6.20 和 Phpmyadmin 下略微改编:

select concat ('DROP TABLE ',table_schema,'.',table_name,';') FROM information_schema.tables where table_name like '%searched_pattern%' limit 0,500

限制为 500,因为 Phpmyadmin 仅显示前 25 个结果,而我想 copy-paste 将所有结果放在一个新的 SQL window.