SHOW CREATE TABLE 是 MySQL 中查看当前实际建表语句的最直接方法,返回完整 CREATE TABLE 语句,含字段、索引、字符集、引擎等全部结构信息,等价于图形界面中“对象信息→DDL 标签页”的内容。

右键表名 → 对象信息 → DDL 标签页,看到的是当前实际建表语句
这个路径展示的是数据库里已生效的完整 CREATE TABLE 语句,等价于执行 SHOW CREATE TABLE table_name 的结果。它不随你在设计界面的操作而变化,只反映最终落地状态。
常见错误是把它当成“修改预览”——比如你刚在设计视图里删了一个字段,但 DDL 标签页仍显示旧结构,这很正常,因为改动还没保存。
- 适合场景:核对线上表真实定义、排查 DEFAULT 是字面值还是函数(如
CURRENT_TIMESTAMP)、确认外键级联行为(ON DELETE CASCADE)是否被图形界面隐藏 - 注意:不会显示运行时元数据(如行数、平均长度),也不支持字段排序或筛选
- 如果 DDL 区域为空或报错,大概率是权限不足(缺少
SELECT权限或无法访问INFORMATION_SCHEMA)
双击表名进设计视图 → 点顶部“SQL预览”选项卡,看到的是未保存的 ALTER 语句
Navicat 17+ 把这个选项卡和“字段”“索引”“外键”并列放在设计窗口顶部。只有你做了结构修改(增删字段、改类型、调主键勾选等)但尚未点保存时,这里才会有内容;没改就点开,会是空白;一保存,立刻清空。
它不是历史记录器,也不是执行校验器,只是实时语法生成器。
- 触发更新的操作包括:
ADD COLUMN、DROP COLUMN、MODIFY COLUMN(改类型)、CHANGE COLUMN(改名)、ADD PRIMARY KEY、DROP INDEX等 DDL 变更 - 字段含空格或特殊字符(如
user name)时,会自动加反引号:`user name`,这是 MySQL 兼容必需,不是 bug - 默认用
MODIFY COLUMN,除非你主动改字段名,否则不会变成CHANGE COLUMN——这点影响迁移工具(如 Flyway)对变更粒度的识别
为什么预览语句和实际执行可能不一致
SQL 预览只保证语法合法,不检查引擎限制、约束依赖或版本兼容性。你看到能生成,不代表能执行成功。
-
INT改成BIGINT能预览,但如果该列上有全文索引,MySQL 8.0+ 会拒绝ALTER TABLE ... MODIFY COLUMN - 删主键前没检查是否被外键引用 → 预览照出
DROP PRIMARY KEY,执行时报Cannot drop index 'PRIMARY': needed in a foreign key constraint - 设了
DEFAULT CURRENT_TIMESTAMP但字段类型不是TIMESTAMP或DATETIME→ 预览无提示,执行失败 - 显式写了
ENGINE=MyISAM,但目标库禁用了该引擎 → 预览不报错,执行抛出Unknown storage engine 'MyISAM'
导出建表语句的两种可靠方式
DDL 标签页内容可直接复制;若需批量导出或带注释/外键等高级选项,用右键菜单更可控。
- 右键表 →
脚本→生成创建脚本:可选格式(SQL/DDL)、是否包含注释、是否包含外键约束、是否格式化缩进 - 右键数据库或表 →
转储SQL文件→仅结构:适合整库导出,生成独立 .sql 文件,便于版本管理或跨环境部署 - 避免用“对象信息 → 编辑 → DDL”后手动复制,因为那个编辑框允许误改并意外保存,风险高于直接复制只读的 DDL 标签页
SQL预览 和 DDL 是两个完全不同的东西,一个讲“即将做什么”,一个讲“现在是什么”。混淆它们,就会在改表前看不到真实变更影响,或者误以为已保存的修改还能回溯查看。


















