结构同步前必须选对源和目标:左侧为待更新库(如旧库),右侧为对齐基准库(如新库),否则DDL脚本方向错误;比对后需手动勾选具体表及变更语句,并核查字符集、锁表风险等细节。
结构同步前必须选对源和目标数据库连接
navicat 的 结构同步 功能本身不支持“只选某几张表”再点同步——它默认比对整个数据库,但你可以通过界面控制最终执行范围。关键第一步是:确保左侧“源”是你改完结构的开发库(比如 dev_order_db),右侧“目标”是待更新的线上库(比如 prod_order_db)。如果左右颠倒,生成的 sql 会把线上结构反向覆盖成开发结构,风险极高。
比对后手动过滤表,只勾选你要同步的那几张
点击 比对 后,Navicat 会列出所有存在差异的对象(表、视图、索引等)。此时注意两点:
- 顶部列表默认按“对象类型”分组,切换到“表”标签页,能快速聚焦到你关心的表
- 每张表左侧有复选框,**只勾选你真正要同步的表名前的框**;未勾选的表,其下方所有 DDL 语句(如
ADD COLUMN、MODIFY COLUMN)都不会被运行 - 勾选表后,下方语句区会展开该表的全部变更 SQL,可逐条再取消勾选——比如只想加字段、不想删索引,就只留
ALTER TABLE ... ADD COLUMN那行
运行前务必检查生成的 SQL 是否含危险操作
Navicat 生成的语句看起来“自动”,但某些变更在有数据时会锁表或失败,例如:
-
CHANGE COLUMN或MODIFY COLUMN如果涉及类型收缩(如VARCHAR(255)→VARCHAR(50)),可能报错ERROR 1265: Data truncated -
DROP COLUMN会直接丢数据,且无法回滚;即使目标表为空,也要确认业务逻辑是否允许 - 外键变更(如
ADD CONSTRAINT)要求关联字段已存在且类型完全一致,否则报错ERROR 1005
建议右键某条 SQL → “复制语句”,粘贴到新查询窗口手动执行前先 DESCRIBE table_name 核对现状。
别跳过“安全模式”和备份步骤
Navicat 默认开启“安全模式”(即勾选 运行前备份目标数据库),但它只备份整个库,不是单表。如果你只动一两张表,这个备份粒度太大、恢复麻烦。更务实的做法是:
- 在目标库手动执行
CREATE TABLE backup_table_name AS SELECT * FROM target_table_name备份单表(尤其当表不大时) - 关闭 Navicat 的全局备份选项,避免耗时等待,把时间省在验证 SQL 和观察日志上
- 执行后立刻查
information_schema.COLUMNS确认字段增删是否生效,别只信 Navicat 的“成功”提示
真正容易被忽略的是字符集和排序规则——utf8mb4_unicode_ci 和 utf8mb4_0900_as_cs 看似兼容,但在外键或唯一索引场景下可能静默失败。比对前,先用 SHOW CREATE TABLE 对比两边建表语句里的 CHARACTER SET 和 COLLATE。


















