如何通过数据库名查询表名?sql根据数据库名查询表名
- 虚拟主机
- 2026-06-27
- 6
在关系型数据库管理系统中,通过已知的数据库名称来查找其中包含的所有表名,是数据库管理、数据迁移以及系统维护中的基础且关键的操作,不同的数据库管理系统(RDBMS)提供了不同的元数据查询机制,通常涉及系统视图或系统表,以下将针对主流的 MySQL、PostgreSQL 和 SQL Server 三种数据库进行详细说明。
MySQL 数据库查询方法
在 MySQL 中,最标准且推荐的方式是查询 information_schema 数据库中的 tables 表,该数据库包含了所有数据库的元数据信息。
核心 SQL 语句:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'your_database_name';
参数说明:
- table_name:返回的表名。
- information_schema.tables:存储所有表元数据的系统视图。
- table_schema:对应于数据库的名称(在 MySQL 中,schema 和 database 是同义词)。
- your_database_name:需要替换为实际的目标数据库名称,注意使用单引号包裹。
注意事项:
- 如果当前连接的用户没有权限访问 information_schema,查询可能会失败。
- 此方法会返回该数据库下所有的表,包括视图(如果未过滤 table_type),若只想获取普通表,可添加条件 AND table_type = 'BASE TABLE'。
PostgreSQL 数据库查询方法
PostgreSQL 提供了两种主要途径:一是查询系统目录表 pg_class 和 pg_namespace,二是查询标准的 information_schema。
使用 information_schema(推荐,标准兼容性好)
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE';

注意:PostgreSQL 中默认模式通常是 public,但也可以指定其他模式名。
使用系统目录(性能更高,适合深层管理)
SELECT c.relname AS table_name FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = 'your_schema_name' AND c.relkind = 'r';
参数说明:
- c.relkind = 'r':表示只查询普通表(regular table),排除索引、序列等。
- n.nspname:对应模式(Schema)名称,在 PostgreSQL 中类似 MySQL 的数据库概念,但一个数据库可包含多个 Schema。
SQL Server (MSSQL) 数据库查询方法
SQL Server 同样支持 information_schema,但其自带的系统视图 sys.tables 和 sys.schemas 更为常用且功能强大。

使用 sys.tables 和 sys.schemas(推荐)
SELECT t.name AS table_name FROM sys.tables t INNER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE s.name = 'your_schema_name';
注意:在 SQL Server 中,通常使用 Schema 来区分对象,如果未指定 Schema,默认通常是 dbo,若需查询特定数据库下的所有表,需先切换到该数据库或使用 USE database_name;。
使用 information_schema
SELECT table_name FROM information_schema.tables WHERE table_catalog = 'your_database_name' AND table_type = 'BASE TABLE';
参数说明:
- table_catalog:对应数据库名称。
- sys.tables:SQL Server 的系统视图,专门存储用户表的信息。
跨数据库通用查询对比表
为了便于快速查阅,以下是三种主流数据库查询表名的关键要素对比:
|
数据库类型 | 推荐查询对象 | 关键字段/条件 | 备注 |
|---|---|---|---|
| MySQL | information_schema.tables | table_schema = 'db_name' | 需区分 BASE TABLE 和 VIEW |
| PostgreSQL | information_schema.tables | table_schema = 'schema_name' | 默认 schema 为 public |
| SQL Server | sys.tables + sys.schemas | s.name = 'schema_name' | 需先切换至目标数据库上下文 |
