如何获得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'