【问题标题】:How to get a list of MySQL views?如何获取 MySQL 视图列表?
【发布时间】:2011-02-19 12:18:09
【问题描述】:

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

最初我找到并尝试了answer on the MySQL forums

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'

为什么这不起作用?

【问题讨论】:

  • link 这可能会有所帮助

标签: mysql


【解决方案1】:

补充以获得有关特定视图的更多信息

即使有两个有效的答案

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 数据库中创建了任何视图,那么您可以像查看特定数据库中的所有表一样简单地查看它。

    写:

    --mysql> SHOW TABLES;
    

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

    【讨论】:

      【解决方案3】:

      这会起作用。

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

      【讨论】:

      • 这样更好,因为我可以使用 concat 将其操作为“SHOW CREATE”。
      • Valerie Parham-Thompson的答案相同
      【解决方案4】:
       select * FROM information_schema.views\G; 
      

      【讨论】:

        【解决方案5】:

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

        SELECT DISTINCT table_name FROM information_schema.TABLES WHERE table_type = 'VIEW'

        【讨论】:

          【解决方案6】:

          这是一种在您的实例上的每个数据库中查找所有视图的方法:

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

          【讨论】:

          • 如果您想将搜索限制在某个数据库以获得所提出问题的答案,请添加AND TABLE_SCHEMA LIKE 'database_name'
          • 要补充或检索有关视图的更多数据,请考虑:stackoverflow.com/questions/2834016/…
          【解决方案7】:

          尝试将 mysql.bak 目录从 /var/lib/mysql 中移出以说出 /root/ 或其他内容。似乎 mysql 正在发现这一点,并且可能导致 ERROR 1102 (42000): Incorrect database name 'mysql.bak' 错误。

          【讨论】:

            【解决方案8】:
            SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW';
            

            MySQL query to find all views in a database

            【讨论】:

            • 如果您在当前选择的数据库中寻找视图,可以不使用“IN database_name”。
            • 要补充或检索有关视图的更多数据,请考虑:stackoverflow.com/questions/2834016/…
            【解决方案9】:

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

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

            解决办法是在硬盘上找到mysql.bak目录,把它从MySQL上移开。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-06-25
              • 1970-01-01
              • 1970-01-01
              • 2023-03-07
              • 2023-03-18
              • 1970-01-01
              相关资源
              最近更新 更多