如何获取MySQL视图列表?


127

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

最初,我在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'

为什么这不起作用?


链接可能会有所帮助
SHASHI SHEKHAR Barnwal

Answers:





7

这将起作用。

    USE INFORMATION_SCHEMA;
    SELECT TABLE_SCHEMA, TABLE_NAME
    FROM information_schema.tables
    WHERE TABLE_TYPE LIKE 'VIEW';

2
这样比较好,因为我可以用concat对其进行“ SHOW CREATE”操作。
Moshe L

1
Valerie Parham-Thompson
曼努埃尔·乔丹

5

作为补充,以获取有关特定视图的更多信息

即使有两个有效答案

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(现在观察是VIEWS而不是TABLES),因此您可以检索更多数据,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';

当然,您还有更多字段可供您考虑。


2

尝试移动该mysql.bak目录出来/var/lib/mysql/root/什么的。似乎mysql正在发现该ERROR 1102 (42000): Incorrect database name 'mysql.bak'错误,可能是导致该错误的原因。


1

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

无法正常工作的数据库的名称看起来可疑,就像有人在某个时候将mysql数据库目录复制到备份并将其保留在MySQL的数据目录中一样。只要您不尝试将数据库用于任何事情,这都不是问题。不幸的是,信息架构会扫描它找到的所有数据库,并发现该数据库不是真正的数据库,并且会感到不高兴。

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


0

查找所有视图的另一种方法:

在information_schema.TABLES中选择DISTINCT table_name table_type ='VIEW'


0

如果您在Mysql数据库中创建了任何视图,则可以在查看特定数据库中的所有表时简单地查看它。

写:

--mysql> SHOW TABLES;

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.