查看 MySQL 表结构,最快的命令是 DESC 加表名,也就是 DESC 表名,执行后会立刻列出每个字段的名字、类型、是否允许为空。你接手了一个别人的数据库,或者复习自己三个月前建的表,第一反应往往是:这表里到底有哪些字段、什么类型、有没有索引?每次都去翻建表文档,效率太低。本文基于 MySQL 8.0 验证,整理 DESC、SHOW CREATE TABLE、SHOW COLUMNS、查 INFORMATION_SCHEMA 四种方式,并说明命令行和图形化工具怎么选。看完你能在任意环境下几秒钟看清一张表。今天这篇文章,编程狮就把这块讲透。
一、先说结论:DESC 表名最快
DESC(全称 DESCRIBE)是查看表结构最常用的命令,它直接把字段信息以表格形式打出来。你可以把它理解成"打开抽屉看里面装了什么"——一眼就知道这张表长什么样。
DESC user;
-- 或等价写法
DESCRIBE user;
上面这段在 user 表上执行 DESC,MySQL 会返回一张表,列分别是字段名、类型、是否允许空、是否为主键、默认值、额外信息。想系统学 MySQL 的库表操作,可以先看 MySQL 教程 的前几章。
1.1 返回结果每一列是什么意思
DESC 的输出里,最该盯住的是三列:Type(字段类型,如 varchar(50)、int)、Null(是否允许空,YES 表示可空)、Key(PRI 表示主键)。这三列基本回答了"这个字段是什么、能不能不填、是不是主键"。
1.2 执行前先确认自己在哪个库
看表结构报错,八成不是命令写错,而是库没选对。登录 MySQL 后先执行 SHOW DATABASES; 看有哪些库,再用 USE shop; 切到目标库,之后 DESC 才能找到表。如果不想切库,也可以直接写成 DESC shop.orders;,用"库名.表名"的形式一次到位。养成这个习惯,后面查任何一张表的表结构都不会再撞上"表不存在"的提示。
二、方法一:DESC / DESCRIBE(最常用的字段概览)
日常 80% 的场景,DESC 就够了。它快、直观,适合"我就想看一眼字段"的需求。
DESC orders;
执行后你会看到 orders 表所有字段的纵向清单。常用命令记不住时,MySQL 速查手册 可以贴在旁边随时翻,字段类型、建表语法都能快速查。
💡 小提示:
DESC只能看单张表的结构,看不到索引的全貌,也看不到建表时的注释。需要更完整信息时,往下看方法二。
三、方法二:SHOW CREATE TABLE(看完整建表语句)
如果你想看这张表"当初是怎么建出来的",包括字段类型、所有索引、外键、存储引擎、字符集,用 SHOW CREATE TABLE。
SHOW CREATE TABLE orders\G
末尾的 \G 让 MySQL 把结果竖着输出,长语句更易读。这条命令返回的是完整的 CREATE TABLE 语句,相当于把"建表图纸"原样还给你。很多概念第一次见不懂没关系,更多数据库基础可以在 编程词典 里按词查。
3.1 什么时候必须用 SHOW CREATE TABLE
下面这些情况 DESC 不够用:
- 想复制一张表的结构到新表(
CREATE TABLE new LIKE old前先确认); - 排查索引为什么没生效,需要看完整索引定义;
- 迁移数据库,要拿到可执行的建表语句。
SHOW CREATE TABLE 给的是"真相源头",比 DESC 更全。
3.2 只想看索引?用 SHOW INDEX
SHOW CREATE TABLE 会把整张表结构一次性倒出来,表字段一多,语句读起来就费劲。如果你只关心索引,有更聚焦的命令:
SHOW INDEX FROM orders;
它按行列出每个索引的名字(Key_name)、涉及的字段(Column_name)、是否唯一(Non_unique,值为 0 表示唯一索引),以及字段在联合索引里的先后顺序(Seq_in_index)。排查"明明加了索引却没走索引"这类问题时,先用它确认索引到底建在哪几个字段、顺序对不对,比在一大段建表语句里逐行找要清楚得多。
四、方法三与方法四:SHOW COLUMNS、INFORMATION_SCHEMA 与怎么选
剩下的两种方式更偏向"按需筛选"和"批量查询"。
4.1 SHOW COLUMNS(等价于 DESC,可过滤)
SHOW COLUMNS FROM orders LIKE 'user%';
SHOW COLUMNS 和 DESC 返回的信息基本一致,区别在于它支持 LIKE 过滤——比如你只想知道哪些字段以 user 开头,就用上面的写法。处理字段很多的宽表时很好用。
4.2 查 INFORMATION_SCHEMA.COLUMNS(跨表、可导出)
INFORMATION_SCHEMA 是 MySQL 自带的"元数据数据库",里面存着所有表的字段信息。直接查它,能做 DESC 做不到的事:跨多张表筛选、按条件过滤、把结果导出。
SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'shop' AND TABLE_NAME = 'orders';
这段查 shop 库里 orders 表的字段名、类型、可否为空、是否主键。当你要批量盘点几十张表的字段时,这种 SQL 查询比逐个 DESC 高效得多。它本质是标准 SQL,和 SQL 教程 里讲的查询语法完全相通。
4.3 四种方法怎么选
| 方式 | 适合场景 | 能看到索引/建表语句吗 |
|---|---|---|
| DESC / DESCRIBE | 看单表字段概览 | 否 |
| SHOW CREATE TABLE | 看完整建表语句、索引、引擎 | 是 |
| SHOW COLUMNS | 单表字段,需 LIKE 过滤 | 否 |
| INFORMATION_SCHEMA | 跨表批量查、导出 | 部分(需自己 SELECT) |
4.4 命令行和图形化工具怎么配合
Navicat、DBeaver、MySQL Workbench 这些工具,点开一张表就能看到字段列表和索引页签,看起来比敲命令省事。但它们背后执行的仍然是上面这几条 SQL,只是把结果渲染成了界面。所以两者不是二选一的关系:本地开发时用图形化工具看表结构更直观,改字段也方便;而连生产库、走跳板机,或者在容器里只有一个终端时,命令行往往是唯一选择。把这几条命令记熟,等于给自己留了一条随时可用的退路。
4.5 三个常见报错怎么排查
ERROR 1146 (42S02): Table 'shop.order' doesn't exist:表名写错或库没切对,先用SHOW TABLES;核对一遍真实表名;ERROR 1142:当前账号对这张表没有查看权限,需要管理员授予SELECT或SHOW VIEW权限;- 查
INFORMATION_SCHEMA返回空结果:多半是把TABLE_SCHEMA(库名)写成了表名,或者大小写不一致——Linux 服务器上的 MySQL,库名表名默认是区分大小写的。
遇到这三类问题时,把表结构相关的排查按"先确认库、再确认表、最后确认权限"的顺序走一遍,基本都能定位到原因。
⚠️ 注意:以上命令都需要你有该库的访问权限,且当前已
USE到对应数据库,或用库名.表名的写法。权限不足时会报ERROR 1142。
总结
查看 MySQL 表结构,记住一个核心命令:DESC 表名; 最快看字段概览。要完整建表语句用 SHOW CREATE TABLE;要按关键字过滤单表字段用 SHOW COLUMNS;要跨表批量盘点用查 INFORMATION_SCHEMA.COLUMNS。命令行和图形化工具(如 Navicat、MySQL Workbench)底层也是这些命令,只是把结果画成了界面——会命令,换任何工具都不慌。
要点带走:
- 日常看字段,
DESC 表名最快; - 要建表全貌,
SHOW CREATE TABLE最全; - 要过滤或批量,
SHOW COLUMNS与INFORMATION_SCHEMA更灵活; - 这些命令本质都是 SQL,学会一处到处能用。
下一步,把建表、改表(ALTER TABLE)和看表结构串起来练熟,操作数据库会更顺手。
延伸学习
想把数据库基础系统补齐,可以按这个顺序来:
- 先过一遍 编程基础与数据库方向,看清从 SQL 到数据库的完整学习路径;
- 想系统学各类数据库课程,编程课程 汇总了从 MySQL 到实战的多条路线。
常见问题
Q:DESC 和 DESCRIBE 有区别吗?
A:没有。DESCRIBE 是 DESC 的完整写法,两者完全等价,返回同样的字段信息,日常用短的 DESC 更省事。
Q:DESC 看不到索引怎么办?
A:用 SHOW CREATE TABLE 表名\G,它会把这张表的所有索引、外键、引擎、字符集完整打印出来,比 DESC 更全。
Q:怎么一次性看多个表的结构?
A:逐个 DESC 太慢时,直接查 INFORMATION_SCHEMA.COLUMNS,用 WHERE TABLE_SCHEMA='库名' 过滤,就能一次性拿到多张表的字段清单,还能导出。

免费 AI IDE



