如何获得MySQL视图的列表?
我正在寻找一种方式来列出数据库中的所有视图。
最初我在MySQL论坛上find并尝试了一个答案 :
SELECT table_name FROM information_schema.views WHERE information_schema.views.table_schema LIKE 'view%';
怎么这个不行,返回一个空集。 (我知道他们在那里!)
这些也失败了:
mysql> use information_schema; Database changed mysql> select * from views; ERROR 1102 (42000): Incorrect database name 'mysql.bak' mysql> select * from tables; ERROR 1102 (42000): Incorrect database name 'mysql.bak'
为什么这不起作用?
SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW';
MySQL查询来查找数据库中的所有视图
以下是在您的实例的每个数据库中查找所有视图的方法:
SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.tables WHERE TABLE_TYPE LIKE 'VIEW';
select * FROM information_schema.views\G;
这将工作。
USE INFORMATION_SCHEMA; SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.tables WHERE TABLE_TYPE LIKE 'VIEW';
你看到的错误可能是由于MySQL的数据目录中有一个非MySQL创build的目录。 MySQL将数据库结构直接映射到文件系统上,数据库映射到目录,表是这些目录中的文件。
非工作数据库的名字看起来很可疑,就像有人已经将mysql数据库目录复制到某个备份并将其留在MySQL的数据目录中。 只要你不尝试和使用数据库的任何东西,这不是一个问题。 不幸的是,信息模式扫描了它find的所有数据库,发现这个数据库不是一个真正的数据库,并且感到不安。
解决方法是find硬盘上的mysql.bak目录,并将其移离MySQL。
尝试将/var/lib/mysql
移出mysql.bak
目录来说/root/
或其他东西。 看起来像是MySQL发现,它可能导致ERROR 1102 (42000): Incorrect database name 'mysql.bak'
错误。
另一种方式查找所有查看:
SELECT DISTINCT table_name FROM information_schema.TABLES WHERE table_type ='VIEW'