如何获取MySQL视图列表?

时间:2010-05-14 12:21:32

标签: mysql

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

最初我发现并尝试了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'

为什么这不起作用?

9 个答案:

答案 0 :(得分:260)

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

MySQL query to find all views in a database

答案 1 :(得分:22)

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

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

答案 2 :(得分:7)

 select * FROM information_schema.views\G; 

答案 3 :(得分:6)

这样可行。

_showData = (data,i,j) => {

  this.setState({iValue:i,jValue:j},()=>{
    //this.fetchData()
        this.state.tableCellData.push({"i":i,"j":j})
        this.setState({isSelected:true,tableCellData:this.state.tableCellData},()=>{/*alert("array:"+JSON.stringify(this.state.tableCellData))*/})

        if(this.state.isSelected == true){
          this.setState({isSelected:false})
        }else{
          this.setState({isSelected:true})
        }

    this.state.tableCellData.map((item, index) => {
     if(item.i == i && item.j == j){
       this.state.tableCellData.splice(index,0)
       this.setState({isSelected:false})
       alert("splice:"+JSON.stringify(this.state.tableCellData))
     }
   })
  this.fetchData()

  })

}

答案 4 :(得分:4)

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

即使有两个有效答案

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 ),因此您可以检索更多数据,请使用{{1} }以获取更多详细信息:

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

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

答案 5 :(得分:1)

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

非工作数据库的名称看起来很奇怪,就像有人将mysql数据库目录复制到某个备份点并将其保留在MySQL的数据目录中。只要您不尝试使用数据库进行任何操作,这就不是问题。不幸的是,信息模式会扫描它找到的所有数据库,并发现这个数据库不是真正的数据库而且会感到不安。

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

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

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

写:

--mysql> SHOW TABLES;

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