Skip to content

sql-show-tables

在数据库开发和管理过程中,您经常需要查看可用表的列表。这对于模式发现、调试或规划迁移至关重要。本教程涵盖了标准、跨平台的方法以及主要数据库系统中特有但通常更快更简便的命令。

每个关系型数据库管理系统(RDBMS)都会在其系统表或视图中存储关于自身结构的元数据,包括表、列、视图和索引。查询这些元数据可以帮助您列出数据库中的对象。主要有两种方法:

  • SQL 标准方法: 使用 INFORMATION_SCHEMA,它被设计为一个在不同 SQL 数据库之间一致且可移植的接口。
  • 原生命令: 使用您正在使用的 RDBMS 特有的命令或系统视图(例如 MySQL 中的 SHOW TABLES)。

INFORMATION_SCHEMA 是一组 ANSI SQL 标准视图,提供了关于数据库元数据的信息。它是查询表的最可移植方式,并受到 PostgreSQL、MySQL、SQL Server 等数据库的支持。

SELECT table_name, table_type
FROM information_schema.tables
WHERE table_schema = 'your_database_name' -- 或者 PostgreSQL 的 'public'
AND table_type = 'BASE TABLE'; -- 用于排除视图

The table_schema 过滤器很重要,可以避免列出系统表。默认模式的名称可能有所不同(PostgreSQL 中为 ‘public’,MySQL 中为数据库名称)。

表名表类型
employeesBASE TABLE
productsBASE TABLE
ordersBASE TABLE

虽然 INFORMATION_SCHEMA 具有可移植性,但大多数数据库也提供其自身的原生命令,这些命令通常更简洁。

The SHOW TABLES 命令是在 MySQL 或 MariaDB 数据库中列出表的最常用方法。

-- 首先,选择要使用的数据库
USE your_database_name;
-- 然后,列出其中的表
SHOW TABLES;

您还可以使用 LIKE 子句进行模式匹配:

SHOW TABLES LIKE 'prod%'; -- 显示以 'prod' 开头的表

当使用 psql 命令行客户端时,\dt 命令是一个方便的快捷方式。

\dt -- 列出当前模式中的表

要通过标准 SQL 查询执行此操作,您将使用上一节中所示的 information_schema。

SQL Server 在 sys 模式中提供了系统视图,用于详细的、特定于服务器的元数据。

-- 此视图提供更多特定于 SQL Server 的详细信息
SELECT name AS table_name, create_date, modify_date
FROM sys.tables;

一个旧的视图 sysobjects 也存在,但已被弃用。在现代开发中,您应该优先使用 sys.tables 或 information_schema.tables。

注意:sysobjects 是一个向后兼容视图,不应在新开发工作中使用。它的 xtype 列使用单字符代码(‘U’ 代表用户表,‘V’ 代表视图)来标识对象类型。

Oracle 使用一组数据字典视图来存储元数据。列出表最常用的视图是:

  • USER_TABLES: 列出当前用户拥有的所有表。
  • ALL_TABLES: 列出当前用户有权访问的所有表。
  • DBA_TABLES: 列出整个数据库中的所有表(需要更高权限)。
-- 查看您拥有的表
SELECT table_name FROM USER_TABLES;
-- 查看所有您可以访问的表
SELECT owner, table_name FROM ALL_TABLES;

如果您正在编写需要在不同数据库系统上运行的应用程序或脚本,使用 INFORMATION_SCHEMA 是最可靠和推荐的方法。虽然原生命令可能更容易输入,但它们会将您的代码锁定到特定的 RDBMS。对于通过命令行客户端进行的快速、交互式探索,原生命令完全可以接受,并且通常更方便。