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

手动创建表

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 对比

特性CreateTableAutoMigrate
创建表
添加列
删除列
修改列部分支持
精确控制
适用场景生产环境、精确控制开发环境、快速迭代

注意事项

  • CreateTable 仅在表不存在时创建,若已存在会返回错误
  • 建议在创建前使用 HasTable 检查
  • 不会自动创建关联表,需要分别调用
  • 适合对表结构有严格要求的生产环境

要点总结

场景推荐方案
开发环境快速迭代AutoMigrate
生产环境精确控制CreateTable
需要先检查再创建HasTable + CreateTable
重建表结构DropTable + CreateTable

存放路径:D:\git2\jwdev\articles\GORM\入门\数据库迁移基础\手动创建表.md

想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 表结构检查
下一篇 → GORM 一对多关系配置
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码