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