我在询问之前已经检查了this主题,并且我发现它在某一点上很有用,现在还不够。
我在MariaDB服务器中有很多数据库,其中一个已注册的视图被破坏,给我“无效的引用”错误。
我需要的是找出View被破坏的内容,考虑到此错误阻止我运行我的备份例程,而MariaDB日志仅显示“数据库(获取错误:1049)(可锁定)”
现在我有一个我的观点列表,有没有办法在不同的数据库中“选择*”所有这些?
我尝试过这样的事情:
select * from TABLE_SCHEMA where (select TABLE_SCHEMA,TABLE_NAME from information_schema.tables where TABLE_TYPE like 'VIEW');
但是我知道它不起作用,因为我没有提供特定的数据库。
我认为Inner-Join会解决这个问题,但我无法弄清楚如何实现它......
顺便说一句,如果有更好的方法来查找View有缺陷的内容,我将不胜感激。
提前谢谢!
答案 0 :(得分:0)
由于唯一的答案被它的贡献者删除了,我已经开发了一个丑陋但有效的解决方法:
mysql -p*** -e "SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.`TABLES` WHERE TABLE_TYPE LIKE 'VIEW'" > 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
我知道它很难看,但它会运行一个&#34;选择*&#34;在&#34; views.txt&#34;中列出的每个database.table或database.view中,仅返回此查询的第一行。
它在我的服务器中为我提供了一个有效的测试,它向我展示了哪些视图被破坏了:
ERROR 1146(42S02)第1行:表&#39;。&#39;不存在
如果您遇到类似的问题,我希望您可以找到更好的解决方法。