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
📝 发现内容有误?点击此处直接编辑