如何获得 MySQL 视图列表?

我正在寻找一种方法来列出数据库中的所有视图。

最初,我发现并尝试了一个 在 MySQL 论坛上回答问题:

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'

为什么不起作用?

195247 次浏览

您看到的错误可能是由于 MySQL 数据目录中的一个非 MySQL 创建的目录。MySQL 将数据库结构直接映射到文件系统,数据库被映射到目录,而表是这些目录中的文件。

无法工作的数据库的名称看起来可疑,就像有人在某个时候将 MySQL 数据库目录复制到备份中,并将其保留在 MySQL 的数据目录中。这不是一个问题,只要你不尝试和使用数据库的任何东西。不幸的是,信息模式扫描了它找到的所有数据库,发现这个数据库不是一个真正的数据库,并感到不安。

解决方案是在硬盘上找到 MySQL.bak 目录,并将其远离 MySQL。

尝试将 mysql.bak目录从 /var/lib/mysql移到 /root/之类的地方。似乎 mysql 正在发现这一点,并可能导致 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 DISTINCT table _ name FROM information _ schema. TABLES WHERE table _ type = ‘ 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> SHOW TABLES;

您将看到数据库的表和视图列表。

互补即将获得更多关于特定视图的信息

即使有两个有效的答案

SHOW FULL TABLES IN your_db_name WHERE TABLE_TYPE LIKE 'VIEW';


SELECT TABLE_SCHEMA, TABLE_NAME
FROM information_schema.TABLES
WHERE TABLE_TYPE LIKE 'VIEW' AND TABLE_SCHEMA LIKE 'your_db_name';

你可以采用以下方法(我认为这样更好) :

SELECT TABLE_SCHEMA, TABLE_NAME
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA LIKE 'your_db_name';

最好直接使用 information_schema.VIEWS(现在观察到的是 观点而不再是 桌子) ,这样你可以检索到更多的数据,使用 DESC VIEWS获得更多的细节:

+----------------------+---------------------------------+------+-----+---------+-------+
| Field                | Type                            | Null | Key | Default | Extra |
+----------------------+---------------------------------+------+-----+---------+-------+
| TABLE_CATALOG        | varchar(64)                     | YES  |     | NULL    |       |
| TABLE_SCHEMA         | varchar(64)                     | YES  |     | NULL    |       |
| TABLE_NAME           | varchar(64)                     | YES  |     | NULL    |       |
| VIEW_DEFINITION      | longtext                        | YES  |     | NULL    |       |
| CHECK_OPTION         | enum('NONE','LOCAL','CASCADED') | YES  |     | NULL    |       |
| IS_UPDATABLE         | enum('NO','YES')                | YES  |     | NULL    |       |
| DEFINER              | varchar(93)                     | YES  |     | NULL    |       |
| SECURITY_TYPE        | varchar(7)                      | YES  |     | NULL    |       |
| CHARACTER_SET_CLIENT | varchar(64)                     | NO   |     | NULL    |       |
| COLLATION_CONNECTION | varchar(64)                     | NO   |     | NULL    |       |
+----------------------+---------------------------------+------+-----+---------+-------+

例如,观察 VIEW_DEFINITION字段,这样您就可以在操作中使用:

SELECT TABLE_SCHEMA, TABLE_NAME, VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA LIKE 'your_db_name';

当然,您可以考虑更多的字段。