我正在寻找一种方法来列出数据库中的所有视图。
首先,我找到并尝试了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条答案
按热度按时间aurhwmvo1#
字符串
MySQL query to find all views in a database
zysjyyx42#
下面是一种在示例上的 every 数据库中查找所有视图的方法:
字符串
b5lpy0ml3#
要补充about以获取有关特定视图的更多信息,请执行以下操作
即使有两个有效答案
字符串
您可以使用以下方法(我认为更好):
型
最好直接使用
information_schema.VIEWS
(现在观察的是VIEWS而不是TABLES),这样你就可以检索更多的数据,使用DESC VIEWS
了解更多细节:型
例如,观察
VIEW_DEFINITION
字段,因此您可以在操作中使用:型
当然,您还有更多的领域可供您考虑。
3ks5zfa04#
字符串
w6mmgewl5#
尝试将
mysql.bak
目录移出/var/lib/mysql
,改为/root/
或其他名称。看起来mysql正在查找该目录,并且可能导致ERROR 1102 (42000): Incorrect database name 'mysql.bak'
错误。bwntbbo36#
您看到的错误可能是由于MySQL的数据目录中的非MySQL创建的目录。MySQL将数据库结构直接Map到文件系统,数据库Map到目录,表是这些目录中的文件。
不工作的数据库的名称看起来很可疑,就像有人在某个时候将mysql数据库目录复制到了备份中,并将其留在了MySQL的data目录中。只要你不尝试使用该数据库,这就不是问题。不幸的是,信息模式扫描了它找到的所有数据库,发现这不是一个真实的数据库,并感到不安。
解决方案是在硬盘上找到mysql.bak目录,并将其从MySQL中移走。
p1iqtdky7#
如果你在Mysql数据库中创建了任何视图,那么你可以简单地看到它,就像你在特定数据库中看到所有表一样。
写:
字符串
你将看到你的数据库的表和视图的列表。
ipakzgxi8#
找到所有视图的另一种方法:
SELECT DISTINCT table_name FROM information_schema.TABLES WHERE table_type = 'VIEW'
mrzz3bfm9#
这对我从INFORMATION_SCHEMA.VIEWS获取所有视图表select * 有效
下面的查询用于获取特定表的所有视图。select * from INFORMATION_SCHEMA.VIEWS where TABLE_CATALOG='<table_name>'