AutoMigrate 自动迁移
AutoMigrate 用来根据 Go 模型创建或更新数据库表结构。
一、最小迁移示例
如果 users 表不存在,GORM 会创建它。
如果表已经存在,GORM 会尽量补充缺少的字段和索引。
二、完整示例
运行:
然后在 MySQL 里查看:
三、迁移多张表
有关联关系时,建议先写被引用的模型,再写引用它的模型:
四、AutoMigrate 会做什么
AutoMigrate 主要适合做这些事:
- 创建不存在的表
- 创建缺少的字段
- 创建缺少的索引
- 创建缺少的约束
- 在部分情况下修改字段类型
它不会主动做高风险操作。
五、AutoMigrate 不适合做什么
不要指望 AutoMigrate 完成所有生产数据库变更。
例如:
- 删除字段
- 重命名字段
- 拆表
- 合并表
- 复杂数据迁移
- 需要人工确认的索引调整
这些更适合用专门的迁移工具或手写 SQL。
本地练习时可以直接用 AutoMigrate,真实项目上线后要谨慎。
六、查看 GORM 生成的 SQL
开发阶段可以开启日志:
或者初始化时配置日志级别。先用 Debug() 最简单。
执行后终端会打印 SQL,方便确认 GORM 做了什么。
七、字段变更示例
原模型:
新增字段:
再次执行:
GORM 会尝试新增 avatar 字段。
八、迁移建议
结论:AutoMigrate 适合快速创建和补字段,不适合替代严肃的数据库迁移流程。

