有没有办法使用MYSQL跨多个数据库删除表?我正在使用Sequel Pro,但是在GUI中没有看到任何选项,所以我想知道是否有某种命令可以做到这一点?
所有数据库中的表名都是相同的,逐个删除它们非常耗时。这真的有助于清理数据库,因为我们有数百个并且它们共享相同的表。但是,不再需要某些表,需要删除它们。
希望有人可以帮助查询这样做。
答案 0 :(得分:1)
您需要为每个表运行单独的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存储的程序中,我们可以运行相同的查询(获取表的列表),然后循环它们(使用CURSOR),以及PREPARE,EXECUTE和DEALLOCATE PREPARE来执行“drop table”语句。这是一个选项,但对于一次性拍摄,创建脚本会更容易。