全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-21 6 分钟 ✍️ juanwangdev

AutoMigrate 使用

GORM 提供 AutoMigrate 方法,自动根据模型结构创建或更新数据库表结构。

什么是 AutoMigrate

AutoMigrate 会根据 Go 结构体定义,自动执行以下操作:

  • 创建不存在的表
  • 添加缺失的列
  • 添加缺失的索引
  • 修改列类型(仅兼容变更)

注意:AutoMigrate 不会删除未使用的列或已变更的列名,以保证数据安全。

基本语法

Go
func (db *DB) AutoMigrate(dst ...interface{}) error

使用示例

单模型迁移

Go
type User struct {
    gorm.Model
    Name  string
    Email string `gorm:"uniqueIndex"`
    Age   int
}

// 自动创建 users 表
db.AutoMigrate(&User{})

多模型同时迁移

Go
type Product struct {
    ID    uint   `gorm:"primaryKey"`
    Name  string
    Price float64
}

type Order struct {
    ID        uint `gorm:"primaryKey"`
    UserID    uint
    ProductID uint
    Quantity  int
}

// 同时创建多个表
db.AutoMigrate(&User{}, &Product{}, &Order{})

带错误处理

Go
err := db.AutoMigrate(&User{})
if err != nil {
    log.Fatalf("迁移失败: %v", err)
}

注意事项

  • AutoMigrate 仅用于开发环境或简单场景,生产环境建议使用专业迁移工具
  • 不会删除已废弃的列或重命名的列
  • 外键关系需要手动配置,AutoMigrate 不自动创建外键约束
  • 多次调用 AutoMigrate 是安全的,已存在的对象会被跳过

要点总结

特性说明
自动创建表表不存在时自动创建
添加缺失列检测并添加新字段
添加索引自动创建 model 中定义的索引
安全性不删除已有列或数据
幂等性可重复调用,已存在则跳过

存放路径:D:\git2\jwdev\articles\GORM\入门\数据库迁移基础\AutoMigrate 使用.md

想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 命名约定与映射规则
下一篇 → 表结构检查
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码