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

表结构检查

GORM 提供一系列方法用于检查数据库表结构是否存在,常用于迁移前的条件判断。

什么是表结构检查

在创建或修改表结构前,通过检查方法确认当前数据库状态,避免重复操作或错误。

常用检查方法

检查表是否存在

Go
// 检查模型对应的表是否存在
hasTable := db.Migrator().HasTable(&User{})

// 检查指定表名是否存在
hasTable = db.Migrator().HasTable("users")

检查列是否存在

Go
// 检查指定表的列是否存在
hasColumn := db.Migrator().HasColumn(&User{}, "Name")
hasColumn = db.Migrator().HasColumn("users", "name")

检查索引是否存在

Go
// 检查指定索引是否存在
hasIndex := db.Migrator().HasIndex(&User{}, "idx_users_email")

使用示例

条件创建表

Go
if !db.Migrator().HasTable(&User{}) {
    db.Migrator().CreateTable(&User{})
    fmt.Println("表创建成功")
}

条件添加列

Go
if !db.Migrator().HasColumn(&User{}, "Phone") {
    db.Migrator().AddColumn(&User{}, "Phone")
    fmt.Println("列添加成功")
}

完整检查流程

Go
type User struct {
    gorm.Model
    Name  string
    Email string
}

migrator := db.Migrator()

if !migrator.HasTable(&User{}) {
    log.Println("表不存在,准备创建")
    migrator.CreateTable(&User{})
} else {
    if !migrator.HasColumn(&User{}, "Email") {
        log.Println("列不存在,准备添加")
        migrator.AddColumn(&User{}, "Email")
    }
}

注意事项

  • 所有检查方法都返回 bool 类型
  • 方法参数支持传入模型结构体指针或表名字符串
  • 检查方法不会抛出错误,仅返回 true/false
  • HasIndex 需要传入完整的索引名称

要点总结

方法用途参数类型
HasTable检查表是否存在模型或表名
HasColumn检查列是否存在模型+列名或表名+列名
HasIndex检查索引是否存在模型+索引名

存放路径:D:\git2\jwdev\articles\GORM\入门\数据库迁移基础\表结构检查.md

想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 AutoMigrate 使用
下一篇 → 手动创建表
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码