SHOW CREATE TABLE 是什么
它返回一张表的完整建表语句:字段定义、类型、默认值、字符集与排序规则、索引、外键、注释与当前自增值。核对线上表结构、跨环境复制结构、排查「同一张表两个环境不一致」时,它是最直接的证据。
基本信息
| 语法 | SHOW CREATE TABLE 表名;结尾加 \G 可纵向排版便于阅读 |
|---|---|
| 同族命令 | SHOW CREATE DATABASE / VIEW / TRIGGER / PROCEDURE |
| 权限要求 | 对目标表至少具备某种访问权限 |
| 输出特点 | 单行内包含完整 DDL,含字符集与排序规则 |
| 相关视图 | information_schema.COLUMNS 与 STATISTICS 可做结构化比对 |
典型使用场景
- 跨环境结构核对:把生产与预发的建表语句做差异比对
- 复制结构到新表:取到 DDL 后改名执行,或直接用 CREATE TABLE LIKE
- 排查索引缺失:确认唯一索引与普通索引是否与设计文档一致
- 审阅自增与字符集:确认排序规则与自增起点符合规范
- 变更前置调研:改字段类型前先看当前定义与注释,避免误删语义
常用示例
常用示例
SHOW CREATE TABLE orders\G -- 纵向显示,便于逐行阅读
SHOW CREATE DATABASE appdb\G -- 确认库的字符集与排序规则
SHOW CREATE VIEW v_order_summary\G -- 视图定义
-- 只复制结构(含索引与自增属性),不带数据:
CREATE TABLE orders_2026 LIKE orders;
-- 对比两表字段差异:
SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='appdb' AND TABLE_NAME='orders' ORDER BY ORDINAL_POSITION;输出逐列读法
| 片段 | 含义 | 对比时的注意点 |
|---|---|---|
| ENGINE | 存储引擎 | 环境间不一致通常意味着复制或迁移方式不同 |
| DEFAULT CHARSET | 表字符集与排序规则 | 排序规则差异会影响比较与排序结果 |
| AUTO_INCREMENT | 下一个自增值 | 环境对比时可忽略这一行 |
| KEY 与 UNIQUE KEY | 普通索引与唯一索引 | 缺索引是性能问题的常见根因 |
| CONSTRAINT | 外键与检查约束 | 恢复时要注意建表顺序与约束检查开关 |
输出里的自增值是当前值而非定义,做环境对比时先剔除这一行,否则会看到大量无意义的差异。
MySQL 8.0 输出的 DDL 会包含排序规则与索引可见性等信息;版本不同输出格式略有差异,跨版本比对要按字段拆解而不是整行文本比对。
拿输出的 DDL 直接在生产执行前要确认表名与库名:DDL 不具事务性,写错目标库会直接落在生产数据上。