如何获取MySQL视图列表?

mdfafbf1  于 2024-01-05  发布在  Mysql
关注(0)|答案(9)|浏览(197)

我正在寻找一种方法来列出数据库中的所有视图。
首先,我找到并尝试了answer on the MySQL forums

  1. SELECT table_name
  2. FROM information_schema.views
  3. WHERE information_schema.views.table_schema LIKE 'view%';

字符串
但是这不起作用,返回一个空的集合。(我知道它们在里面!)
这些也失败了:

  1. mysql> use information_schema;
  2. Database changed
  3. mysql> select * from views;
  4. ERROR 1102 (42000): Incorrect database name 'mysql.bak'
  5. mysql> select * from tables;
  6. ERROR 1102 (42000): Incorrect database name 'mysql.bak'


为什么不管用?

aurhwmvo

aurhwmvo1#

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

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

zysjyyx4

zysjyyx42#

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

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

字符串

b5lpy0ml

b5lpy0ml3#

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

  1. SHOW FULL TABLES IN your_db_name WHERE TABLE_TYPE LIKE 'VIEW';
  2. SELECT TABLE_SCHEMA, TABLE_NAME
  3. FROM information_schema.TABLES
  4. WHERE TABLE_TYPE LIKE 'VIEW' AND TABLE_SCHEMA LIKE 'your_db_name';

字符串
您可以使用以下方法(我认为更好):

  1. SELECT TABLE_SCHEMA, TABLE_NAME
  2. FROM information_schema.VIEWS
  3. WHERE TABLE_SCHEMA LIKE 'your_db_name';


最好直接使用information_schema.VIEWS(现在观察的是VIEWS而不是TABLES),这样你就可以检索更多的数据,使用DESC VIEWS了解更多细节:

  1. +----------------------+---------------------------------+------+-----+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +----------------------+---------------------------------+------+-----+---------+-------+
  4. | TABLE_CATALOG | varchar(64) | YES | | NULL | |
  5. | TABLE_SCHEMA | varchar(64) | YES | | NULL | |
  6. | TABLE_NAME | varchar(64) | YES | | NULL | |
  7. | VIEW_DEFINITION | longtext | YES | | NULL | |
  8. | CHECK_OPTION | enum('NONE','LOCAL','CASCADED') | YES | | NULL | |
  9. | IS_UPDATABLE | enum('NO','YES') | YES | | NULL | |
  10. | DEFINER | varchar(93) | YES | | NULL | |
  11. | SECURITY_TYPE | varchar(7) | YES | | NULL | |
  12. | CHARACTER_SET_CLIENT | varchar(64) | NO | | NULL | |
  13. | COLLATION_CONNECTION | varchar(64) | NO | | NULL | |
  14. +----------------------+---------------------------------+------+-----+---------+-------+


例如,观察VIEW_DEFINITION字段,因此您可以在操作中使用:

  1. SELECT TABLE_SCHEMA, TABLE_NAME, VIEW_DEFINITION
  2. FROM information_schema.VIEWS
  3. WHERE TABLE_SCHEMA LIKE 'your_db_name';


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

展开查看全部
3ks5zfa0

3ks5zfa04#

  1. 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数据库中创建了任何视图,那么你可以简单地看到它,就像你在特定数据库中看到所有表一样。
写:

  1. --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>'

相关问题