想知道数据库里所有表的注释咋看,顺便把表名和注释都一块儿查出来
- 问答
- 2025-12-24 16:20:56
- 3
想知道数据库里所有表的注释,并且把表名和注释一起查出来,这个需求非常实际,不同的数据库系统查看的方法完全不同,因为它们内部存储这些信息的地方(称为系统表或数据字典)是不一样的,下面我就分别告诉你几种最常见数据库的查询方法,你根据自己的数据库类型选择对应的方式就行。
MySQL
在MySQL中,表的注释信息主要存储在 information_schema 数据库下的 TABLES 表里,这个 information_schema 是MySQL自带的一个虚拟数据库,它就像是整个MySQL服务器的档案室,记录了所有数据库、表、列、权限等元数据信息。
你需要查询的SQL语句是:
SELECT TABLE_NAME, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = '你的数据库名';
这里需要特别注意一点:TABLE_SCHEMA 指的不是MySQL这个软件本身,而是你创建的具体的那个数据库的名称,你的数据库叫 my_shop,那么语句就应该是:
SELECT TABLE_NAME, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'my_shop';
执行这个查询后,结果就会有两列,一列是 TABLE_NAME(表名),另一列就是 TABLE_COMMENT(表的注释),如果建表的时候没有特意写注释,这一列可能就是空的。
Oracle
Oracle数据库的系统视图(可以理解为一种特殊的表)非常丰富,关于表的注释信息存放在一个叫做 ALL_TAB_COMMENTS 的视图中,这个名字很直白,所有表的注释”。
查询的SQL语句是:
SELECT TABLE_NAME, COMMENTS FROM ALL_TAB_COMMENTS WHERE OWNER = '你的模式名';
在Oracle里,OWNER 通常相当于用户名,也就是你这个表是属于哪个用户的,你的用户是 SCOTT,那么语句就是:
SELECT TABLE_NAME, COMMENTS FROM ALL_TAB_COMMENTS WHERE OWNER = 'SCOTT';
执行后,你会得到表名和对应的注释,如果你只想看你自己用户下的表,用这个视图就很方便,如果你想看整个数据库里所有你能访问的表,也可以把 WHERE OWNER = 'SCOTT' 这个条件去掉。
SQL Server
在Microsoft SQL Server中,表的注释是通过扩展属性来实现的,查询起来比前两者稍微复杂一点,需要连接系统表,一个常用的方法是查询 sys.tables 系统表,然后关联 sys.extended_properties 来获取注释。
SQL语句如下:
SELECT
t.name AS TABLE_NAME,
ep.value AS COMMENTS
FROM
sys.tables t
LEFT JOIN
sys.extended_properties ep ON ep.major_id = t.object_id
AND ep.minor_id = 0
AND ep.name = 'MS_Description';
这个语句稍微解释一下:sys.tables 存储了所有表的基本信息,sys.extended_properties 存储了扩展属性,其中就包括我们通过SQL Server Management Studio(SSMS)或者T-SQL语句添加的注释(其标准属性名称为'MS_Description')。major_id 对应表的ID,minor_id 为0表示这是表本身的属性,而不是表中某个列的属性,使用 LEFT JOIN 是为了确保即使有些表没有注释,也能在结果中显示出表名,只是注释为空。
PostgreSQL
PostgreSQL也是一个很流行的开源数据库,它的信息模式(Information Schema)和MySQL类似,但更严格地遵循SQL标准,PostgreSQL的表注释并没有直接放在信息模式的标准视图里,而是存储在自身的系统目录中。
查询语句是:
SELECT
c.relname AS TABLE_NAME,
d.description AS COMMENTS
FROM
pg_class c
LEFT JOIN
pg_namespace n ON n.oid = c.relnamespace
LEFT JOIN
pg_description d ON d.objoid = c.oid AND d.objsubid = 0
WHERE
c.relkind = 'r' -- 只查询普通表
AND n.nspname = 'public'; -- 指定模式,通常是'public'
这里用到了几个系统表:pg_class 存储所有表、索引等对象的信息;pg_namespace 存储模式(schema)信息;pg_description 存储注释。relkind = 'r' 表示只筛选出普通表(排除视图、索引等)。n.nspname = 'public' 是指定在哪个模式(schema)下查找,如果你创建表时没指定,默认就在 public 模式下。
总结一下
你想查看数据库里所有表的注释,核心就是去查询数据库系统自己用来记录表信息的地方。
- MySQL:去
information_schema.TABLES表里找,条件是你要查的数据库名。 - Oracle:去
ALL_TAB_COMMENTS视图里找,条件是表的属主(用户名)。 - SQL Server:需要连接
sys.tables和sys.extended_properties两个系统表,通过对象的ID关联,并筛选出表注释属性。 - PostgreSQL:需要连接
pg_class、pg_namespace和pg_description系统表,筛选出普通表并关联注释。
你只需要确定自己在用哪种数据库,然后直接用对应的SQL语句查询就可以了,如果不知道数据库名或者用户名,可以先不加WHERE条件执行一下看看,或者咨询一下数据库的管理员,希望这些直接的内容能帮到你。

本文由凤伟才于2025-12-24发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/67647.html
