如何获取MySQL视图列表?

mdfafbf1  于 12个月前  发布在  Mysql
关注(0)|答案(9)|浏览(165)

我正在寻找一种方法来列出数据库中的所有视图。
首先,我找到并尝试了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'


为什么不管用?

aurhwmvo

aurhwmvo1#

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

字符串
MySQL query to find all views in a database

zysjyyx4

zysjyyx42#

下面是一种在示例上的 every 数据库中查找所有视图的方法:

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

字符串

b5lpy0ml

b5lpy0ml3#

补充about以获取有关特定视图的更多信息,请执行以下操作
即使有两个有效答案

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';


当然,您还有更多的领域可供您考虑。

3ks5zfa0

3ks5zfa04#

select * FROM information_schema.views\G;

字符串

w6mmgewl

w6mmgewl5#

尝试将mysql.bak目录移出/var/lib/mysql,改为/root/或其他名称。看起来mysql正在查找该目录,并且可能导致ERROR 1102 (42000): Incorrect database name 'mysql.bak'错误。

bwntbbo3

bwntbbo36#

您看到的错误可能是由于MySQL的数据目录中的非MySQL创建的目录。MySQL将数据库结构直接Map到文件系统,数据库Map到目录,表是这些目录中的文件。
不工作的数据库的名称看起来很可疑,就像有人在某个时候将mysql数据库目录复制到了备份中,并将其留在了MySQL的data目录中。只要你不尝试使用该数据库,这就不是问题。不幸的是,信息模式扫描了它找到的所有数据库,发现这不是一个真实的数据库,并感到不安。
解决方案是在硬盘上找到mysql.bak目录,并将其从MySQL中移走。

p1iqtdky

p1iqtdky7#

如果你在Mysql数据库中创建了任何视图,那么你可以简单地看到它,就像你在特定数据库中看到所有表一样。
写:

--mysql> SHOW TABLES;

字符串
你将看到你的数据库的表和视图的列表。

ipakzgxi

ipakzgxi8#

找到所有视图的另一种方法:
SELECT DISTINCT table_name FROM information_schema.TABLES WHERE table_type = 'VIEW'

mrzz3bfm

mrzz3bfm9#

这对我从INFORMATION_SCHEMA.VIEWS获取所有视图表select * 有效
下面的查询用于获取特定表的所有视图。select * from INFORMATION_SCHEMA.VIEWS where TABLE_CATALOG='<table_name>'

相关问题