MySQL中查询所有视图的命令是SHOW FULL TABLES WHERE TABLE_TYPE = 'VIEW',该语句返回当前数据库中类型为VIEW的表名及类型,需具备SHOW VIEW权限。

MySQL 中用 SHOW FULL TABLES 查视图
MySQL 不提供单独的“列出所有视图”的命令,但 SHOW FULL TABLES 可以区分表和视图:SHOW FULL TABLES WHERE TABLE_TYPE = 'VIEW'。它会返回两列:Tables_in_数据库名 和 Table_type,只保留 VIEW 类型的行。
注意:SHOW TABLES 不管类型,会把视图和表混在一起;而 SHOW FULL TABLES 是唯一能靠 TABLE_TYPE 过滤的内置命令。权限方面,用户需有 SHOW VIEW 权限,否则会报错 ERROR 1142 (42000): SHOW VIEW command denied。
- 如果想查当前数据库的所有视图,直接执行即可,无需指定库名
- 若要查其他库,先
USE other_db,再运行该命令 -
INFORMATION_SCHEMA.VIEWS也能查,但字段多、过滤麻烦,不如SHOW FULL TABLES直观
SQL Server 中查 sys.views 或 sys.objects
SQL Server 把视图当作一类对象存于系统视图中。SELECT name FROM sys.views 最直接;等价写法是 SELECT name FROM sys.objects WHERE type = 'V'(V 表示 View)。
区别在于:sys.views 只含视图,字段更聚焦(比如带 is_ms_shipped 标识系统视图);sys.objects 是通用对象表,type 值还有 U(用户表)、P(存储过程)等,适合一次性查多种对象。
- 跨数据库查时,需加前缀,如
other_db.sys.views(需有对应权限) -
sys.views不包含物化视图(SQL Server 叫索引视图),索引视图需额外查sys.indexes关联判断 - 不要用
sp_help查列表——它只查单个对象,不能枚举
Oracle 中查 USER_VIEWS 或 ALL_VIEWS
Oracle 视图元数据分散在不同字典视图:USER_VIEWS 查当前用户创建的视图;ALL_VIEWS 查当前用户有权限访问的所有视图(包括别人授权给你的);DBA_VIEWS 需 DBA 权限,查全库视图。
最常用的是 SELECT view_name, text FROM USER_VIEWS——text 字段存的是建视图的原始 SQL(已自动格式化换行,可读性尚可)。但注意:该字段内容可能被截断(尤其超长查询),且不包含注释或换行符原始信息。
-
USER_VIEWS的TEXT_LENGTH字段可预判是否截断,> 64000 字节大概率被切 - 要查视图依赖哪些基表,得关联
USER_DEPENDENCIES,不能只看USER_VIEWS -
DESCRIBE view_name在 Oracle 里无效,那是 MySQL 的语法,Oracle 用DESC view_name也不支持视图——只能查表
通用方法:查 INFORMATION_SCHEMA.VIEWS(MySQL / SQL Server / PostgreSQL 兼容)
标准 SQL 提供了 INFORMATION_SCHEMA.VIEWS,三者都支持,字段统一:TABLE_SCHEMA(库名)、TABLE_NAME(视图名)、VIEW_DEFINITION(原始 SQL)。执行 SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS 即可跨库列出所有视图。
但实际限制不少:PostgreSQL 要开 pg_catalog 才完整;SQL Server 默认不启用 INFORMATION_SCHEMA(虽存在但常为空);MySQL 支持最好,但 VIEW_DEFINITION 在低版本可能为 NULL(需开启 show_view_privilege)。
- 优先级建议:先试本地系统视图(如
sys.views、USER_VIEWS),再 fallback 到INFORMATION_SCHEMA -
INFORMATION_SCHEMA不返回权限信息,查不到“你能否看到这个视图”,只返回“它客观存在” - 别指望它返回物化视图——标准视图和物化视图在字典里是分开存的
DESC 在 MySQL 有效,在 Oracle 和 SQL Server 就完全不认。

















