我正在寻找一种列出数据库中所有视图的方法。
最初我发现并尝试了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'
为什么这不起作用?
答案 0 :(得分:260)
SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW';
答案 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;
您将看到数据库的表和视图列表。