全部学科
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

📝 发现内容有误?点击此处直接编辑

← 上一篇 手动创建表
下一篇 → GORM 一对一关系配置
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库