在数据库管理与开发中,通过命令行查看表结构是一项基础且高频的操作,无论是排查问题、编写SQL还是学习数据库设计,都离不开对表结构的直观了解,不同数据库系统的命令行工具和语法存在差异,但核心思路一致:通过特定命令或查询系统表/视图,获取表的字段名、数据类型、约束、索引等详细信息,下面将针对主流数据库(MySQL、PostgreSQL、Oracle、SQL Server、SQLite)详细介绍命令行查看表结构的方法,并对比不同命令的适用场景。
MySQL 查看表结构
MySQL 提供了多种命令查看表结构,最常用的是 DESCRIBE
(或简写 DESC
)、SHOW COLUMNS FROM
和 SHOW CREATE TABLE
。
使用 DESCRIBE
或 DESC
这是最直观的方式,直接输出表的字段信息,包括字段名、类型、是否允许为空、键类型、默认值和额外信息(如自增)。
DESCRIBE 表名; -- 或 DESC 表名;
示例:
DESCRIBE users;
输出如下(以MySQL 8.0为例):
| Field | Type | Null | Key | Default | Extra |
|———|————–|——|——|———|————-|
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| age | int | YES | | NULL | |
| email | varchar(100) | YES | UNI | NULL | |
使用 SHOW COLUMNS FROM
功能与 DESCRIBE
类似,但支持更多选项,如 FULL
可显示字段注释等额外信息:
SHOW COLUMNS FROM 表名 [FROM 数据库名] [FULL];
示例:
SHOW COLUMNS FROM users FULL;
输出会增加 Comment
列,显示字段的注释内容。
使用 SHOW CREATE TABLE
该命令会显示创建表的完整SQL语句,包含字段定义、主键、外键、索引、存储引擎、字符集等所有结构信息,适合需要查看完整建表逻辑的场景:
SHOW CREATE TABLE 表名;
输出示例(部分):
CREATE TABLE `users` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `age` int DEFAULT NULL, `email` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
PostgreSQL 查看表结构
PostgreSQL 主要使用 d
系列命令(需在 psql
客户端中执行)或查询系统视图 information_schema
。
使用 d
命令
d
是 psql
的元命令核心,功能强大:
d 表名
:显示表的字段、类型、约束、索引等信息;d+ 表名
:在d
基础上增加权限、描述等额外信息;d+ 表名
:输出更详细,包括字段的存储长度、统计信息等。
示例:
d users;
输出如下:
| Column | Type | Collation | Nullable | Default | Storage | Stats target | Description |
|——–|———|———–|———-|———|———-|————–|————-|
| id | integer | | not null | | plain | | |
| name | character varying(50) | | not null | | extended | | |
| age | integer | | | | plain | | |
| email | character varying(100) | | | | extended | | |
Indexes: “users_pkey” PRIMARY KEY, btree (id)
“users_email_key” UNIQUE CONSTRAINT, btree (email)
查询 information_schema.columns
通过标准 SQL 查询系统视图,适合脚本化处理或筛选特定字段:
SELECT column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_name = '表名' AND table_schema = '当前模式名';
示例:
SELECT column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_name = 'users' AND table_schema = 'public';
Oracle 查看表结构
Oracle 中常用 DESCRIBE
命令或查询数据字典视图(如 USER_TAB_COLUMNS
)。
使用 DESCRIBE
在 SQL*Plus 或 SQL Developer 命令行中直接执行:
DESCRIBE 表名;
示例:
DESCRIBE users;
输出:
| Name | Null? | Type |
|——–|———-|————–|
| ID | NOT NULL | NUMBER(10) |
| NAME | NOT NULL | VARCHAR2(50) |
| AGE | | NUMBER(3) |
| EMAIL | | VARCHAR2(100)|
查询数据字典视图
Oracle 的数据字典存储了数据库的元数据,USER_TAB_COLUMNS
视图包含当前用户所有表的列信息:
SELECT column_name, data_type, data_length, nullable, data_default FROM user_tab_columns WHERE table_name = '表名';
注意:Oracle 表名默认大写,若表名包含小写,需用双引号括起(如 "users"
)。
SQL Server 查看表结构
SQL Server 主要使用 sp_help
存储过程或查询 information_schema
视图。
使用 sp_help
sp_help
是系统存储过程,输出表的完整信息,包括列信息、约束、索引、类型等:
EXEC sp_help '表名';
示例:
EXEC sp_help 'users';
输出分为多个结果集:第一个是表的基本信息(名称、所有者、类型等),第二个是列信息(名称、类型、是否允许空、默认值等),第三个是约束信息(主键、外键等)。
查询 information_schema.columns
与 PostgreSQL 类似,通过标准 SQL 查询:
SELECT column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_name = '表名';
SQLite 查看表结构
SQLite 作为轻量级数据库,使用 .schema
命令或 PRAGMA
语句查看表结构。
使用 .schema
命令
在 SQLite 命令行(sqlite3
)中执行:
.schema 表名;
若不指定表名,则显示数据库中所有表的创建语句,示例:
.schema users;
输出:
CREATE TABLE users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER, email TEXT UNIQUE );
使用 PRAGMA table_info
PRAGMA
是 SQLite 的特殊命令,table_info
可返回表的详细列信息:
PRAGMA table_info('表名');
示例:
PRAGMA table_info('users');
输出:
| cid | name | type | notnull | dflt_value | pk |
|—–|——-|———|———|————|—-|
| 0 | id | INTEGER | 0 | NULL | 1 |
| 1 | name | TEXT | 1 | NULL | 0 |
| 2 | age | INTEGER | 0 | NULL | 0 |
| 3 | email | TEXT | 0 | NULL | 0 |
不同数据库命令对比
为方便快速查阅,以下表格汇总了主流数据库查看表结构的常用命令:
数据库 | 常用命令 | 语法示例 | |
---|---|---|---|
MySQL | DESCRIBE |
DESCRIBE users; |
字段名、类型、键、默认值等 |
PostgreSQL | d |
d users; |
字段、类型、约束、索引等 |
Oracle | DESCRIBE |
DESCRIBE users; |
字段名、类型、是否为空等 |
SQL Server | sp_help |
EXEC sp_help 'users'; |
表信息、列、约束、索引等 |
SQLite | .schema /PRAGMA table_info |
.schema users; 或 PRAGMA table_info('users'); |
建表语句/列详细信息 |
注意事项
- 权限问题:执行查看表结构的命令需要具备对应表的
SELECT
权限(如 MySQL 的SELECT
权限、Oracle 的SELECT ANY TABLE
权限等); - 大小写敏感:Oracle、PostgreSQL 等数据库默认区分表名大小写,查询时需确保表名大小写与实际一致;
- 方言差异:不同数据库的命令和语法不通用,需根据实际使用的数据库选择合适的方法;
- 输出格式:部分命令(如 MySQL 的
SHOW CREATE TABLE
、PostgreSQL 的d+
更丰富,适合深度分析。
相关问答 FAQs
问题1:为什么有时用 DESCRIBE
查看表结构时,某些字段的“Extra”列显示“generated always as”?
解答:这表示该字段是“生成列”(Generated Column),其值由其他列通过表达式计算得出,而非直接存储。full_name
字段可能定义为 generated always as (first_name || ' ' || last_name) STORED
,表示存储计算后的结果,MySQL 5.7+、PostgreSQL 12+ 等数据库支持生成列,适合冗余字段或复杂计算场景。
问题2:在命令行中如何快速导出某个表的完整结构(包括索引、约束)到文件?
解答:不同数据库方法不同:
- MySQL:使用
mysqldump
命令,仅导出结构(不导出数据):mysqldump -u 用户名 -p 数据库名 表名 --no-data > 表结构.sql
; - PostgreSQL:使用
pg_dump
命令,仅导出结构:pg_dump -U 用户名 -s -t 表名 数据库名 > 表结构.sql
; - Oracle:使用
expdp
数据泵工具,导出 DDL 语句:expdp 用户名/密码 DIRECTORY=目录 DUMPFILE=表结构.sql CONTENT=METADATA_ONLY
; - SQL Server:使用
bcp
或生成脚本,通过 SQL Server Management Studio (SSMS) 右键表“编写脚本为”->“CREATE 到”->“新查询窗口”,再保存为文件。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/18705.html