首页/数据/数据库速查/SHOW CREATE TABLE 查看建表语句

SHOW CREATE TABLE 查看建表语句

取得表的完整 DDL(引擎、字符集、索引、外键、注释),是核对线上表结构与跨环境复制结构的标准手段。

数据库速查数据更新于 2026-10-13

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 不具事务性,写错目标库会直接落在生产数据上。

易错点

  • 用 CREATE TABLE 加 SELECT 复制结构:不复制索引、自增属性与约束,迁移后性能与约束全丢
  • 把自增值当成定义做环境对比:会产生大量虚假差异,掩盖真正的问题
  • 含外键的表恢复时忽略 FOREIGN_KEY_CHECKS 与建表顺序:导入直接失败
  • 只看字段不看字符集与排序规则:跨环境比较结果不一致时很难定位原因

数据来源与参考

  • MySQL 8.0 Reference Manual: SHOW CREATE TABLE Statement

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌