手动创建表
GORM 提供 CreateTable 方法,允许开发者手动定义并创建表结构,避免 AutoMigrate 的自动行为影响。
什么是手动创建表
CreateTable 根据模型结构体完整创建表,适用于需要精确控制表结构、避免自动迁移产生意外变更的场景。
基本语法
Go
func (m Migrator) CreateTable(dst ...interface{}) error
使用示例
创建单个表
Go
type Product struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"size:256;not null"`
Price float64 `gorm:"not null"`
Stock int `gorm:"default:0"`
CreatedAt time.Time
}
err := db.Migrator().CreateTable(&Product{})
if err != nil {
log.Fatalf("创建表失败: %v", err)
}
创建多个表
Go
db.Migrator().CreateTable(&User{}, &Product{}, &Order{})
先删后建
Go
// 删除已存在的表后重新创建
db.Migrator().DropTable(&Product{})
db.Migrator().CreateTable(&Product{})
与 AutoMigrate 对比
| 特性 | CreateTable | AutoMigrate |
|---|---|---|
| 创建表 | 是 | 是 |
| 添加列 | 否 | 是 |
| 删除列 | 否 | 否 |
| 修改列 | 否 | 部分支持 |
| 精确控制 | 高 | 低 |
| 适用场景 | 生产环境、精确控制 | 开发环境、快速迭代 |
注意事项
- CreateTable 仅在表不存在时创建,若已存在会返回错误
- 建议在创建前使用 HasTable 检查
- 不会自动创建关联表,需要分别调用
- 适合对表结构有严格要求的生产环境
要点总结
| 场景 | 推荐方案 |
|---|---|
| 开发环境快速迭代 | AutoMigrate |
| 生产环境精确控制 | CreateTable |
| 需要先检查再创建 | HasTable + CreateTable |
| 重建表结构 | DropTable + CreateTable |
存放路径:D:\git2\jwdev\articles\GORM\入门\数据库迁移基础\手动创建表.md
📝 发现内容有误?点击此处直接编辑