子查询 MYSQL 以从服务器中选择所有数据库

Posted

技术标签:

【中文标题】子查询 MYSQL 以从服务器中选择所有数据库【英文标题】:Subquerying MYSQL to select All Databases from server 【发布时间】:2015-09-30 18:48:38 【问题描述】:

我在提问之前检查了this主题,我发现它只是在某个方面有帮助,现在还不够。

我的 MariaDB 服务器中有很多数据库,其中一个已注册视图损坏,出现“无效引用”错误。

考虑到此错误阻止我运行备份例程,并且 MariaDB 日志仅显示“数据库(出现错误:1049)(锁定表)”,我需要找出哪些视图损坏了

现在我有了一个视图列表,有没有办法在不同的数据库中“选择 *”所有视图?

我尝试过这样的事情:

select *  from TABLE_SCHEMA where (select TABLE_SCHEMA,TABLE_NAME from information_schema.tables where TABLE_TYPE like 'VIEW');

但我知道它不会起作用,因为我没有提供特定的数据库。

我认为 Inner-Join 可以解决这种情况,但我不知道如何完成它...

顺便说一句,如果有更好的方法来找出 View 的缺陷,我将不胜感激。

提前谢谢你!

【问题讨论】:

【参考方案1】:

由于唯一的答案被它的贡献者删除,我开发了一个丑陋但有效的解决方法:

    我使用下面提供的查询创建了一个包含数据库和视图名称的文件:

mysql -p*** -e "SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.`TABLES` WHERE TABLE_TYPE LIKE 'VIEW'" > views.txt

    这会将包含在视图中运行基本选择所需的信息保存到文件“views.txt”中,因此我执行了以下操作:

while IFS= read -r line; do mysql -p*** -e "select * from $(echo $line | awk 'print $1').$(echo $line | awk 'print $2') LIMIT 1" 2>> errors.txt; echo $line >> errors.txt; done < views.txt

我知道它很难看,但它会在“views.txt”中列出的每个 database.table 或 database.view 中运行一个“select *”,只返回此查询的第一行。

它在我的服务器中为我提供了一个有效的测试,它向我展示了哪些视图被破坏了:

第 1 行的错误 1146 (42S02):表 '.'不存在

如果您遇到类似的问题,希望您能找到更好的方法来解决这个问题。

【讨论】:

以上是关于子查询 MYSQL 以从服务器中选择所有数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 HTML 表单以从 Mysql 数据库中查询和生成结果

如何对数据进行分组以从选择查询中按周显示平均价格

mysql中,如何向测试人员介绍连接查询和子查询的优劣势?

MYSQL 选择子查询如果存在

查询以从 Spring Data mongo 返回单个字段

选择查询以从 SQL Server 获取数据