在数据库日常使用中,视图是基于SQL查询结果的虚拟表,很多时候我们需要回溯视图创建时的原始SQL语句,确认视图的查询逻辑、关联表或者过滤条件是否符合预期。使用INFORMATION_SCHEMA系统数据库查询是最通用且高效的方式,不需要依赖特定数据库的可视化工具,直接通过SQL语句就能获取结果。

INFORMATION_SCHEMA中存储视图定义的表
SQL标准里,INFORMATION_SCHEMA下的VIEWS表专门用来存储所有视图的元数据,其中VIEW_DEFINITION字段就是视图的原始定义语句。不同数据库对VIEWS表的字段定义略有不同,常见的核心字段如下:
| 字段名 | 说明 |
|---|---|
| TABLE_CATALOG | 视图所属的目录名,大部分数据库默认返回当前数据库实例名 |
| TABLE_SCHEMA | 视图所属的 schema 名称,通常是数据库名 |
| TABLE_NAME | 视图的名称 |
| VIEW_DEFINITION | 视图的原始定义SQL语句 |
| CHECK_OPTION | 视图的检查选项配置,如NONE、CASCADE等 |
| IS_UPDATABLE | 视图是否可更新,值为YES或NO |
通用查询方法
最基础的查询逻辑是筛选TABLE_SCHEMA为当前数据库名,再指定TABLE_NAME为目标视图名,直接获取VIEW_DEFINITION字段即可。以下是通用的查询模板:
-- 查询指定视图的原始定义,替换your_schema和your_view_name为实际值
SELECT
TABLE_NAME,
VIEW_DEFINITION
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = 'your_schema'
AND TABLE_NAME = 'your_view_name';
如果需要查看当前数据库下所有视图的定义,可以去掉TABLE_NAME的筛选条件:
-- 查询当前schema下所有视图的定义
SELECT
TABLE_NAME,
VIEW_DEFINITION,
IS_UPDATABLE
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = 'your_schema';
不同数据库的特殊说明
MySQL/MariaDB
MySQL完全支持INFORMATION_SCHEMA.VIEWS表,查询返回的定义语句中,表名和字段名如果存在特殊字符会自动添加反引号。如果视图定义过长,VIEW_DEFINITION字段可能会被截断,此时可以通过SHOW CREATE VIEW语句补充查看完整定义:
-- MySQL下查看完整视图定义 SHOW CREATE VIEW your_view_name;
PostgreSQL
PostgreSQL的INFORMATION_SCHEMA.VIEWS表中,VIEW_DEFINITION返回的是视图定义的文本形式,但是不包含CREATE VIEW前缀,如果需要完整的创建语句,可以结合pg_views系统表查询:
-- PostgreSQL下查询完整视图定义
SELECT
viewname,
definition
FROM pg_views
WHERE schemaname = 'your_schema'
AND viewname = 'your_view_name';
SQL Server
SQL Server的INFORMATION_SCHEMA.VIEWS表中,VIEW_DEFINITION字段长度限制为4000字符,超过部分会被截断,此时可以使用系统存储过程sp_helptext获取完整定义:
-- SQL Server下查看完整视图定义 EXEC sp_helptext 'your_schema.your_view_name';
注意事项
- 查询INFORMATION_SCHEMA需要有对应的权限,普通用户如果没有系统表的查询权限,可能无法获取视图定义内容。
- 如果视图定义中引用了其他视图,
VIEW_DEFINITION只会显示当前视图的查询逻辑,不会展开依赖视图的定义。 - 部分数据库会对
VIEW_DEFINITION中的换行符做处理,返回的文本可能是单行形式,需要手动格式化方便阅读。
注意:不要直接修改INFORMATION_SCHEMA下的表内容,这些是系统元数据表,修改可能导致数据库元数据损坏,引发不可预期的问题。
SQL视图INFORMATION_SCHEMAVIEW_DEFINITION数据库查询视图定义修改时间:2026-07-22 00:33:27