Gorm(表的操作以及索引的操作)

作者: adm 分类: go 发布时间: 2022-10-11

Gorm(表的操作以及索引的操作)

package main

import (
"fmt"
_ "github.com/jinzhu/gorm/dialects/mysql"
"github.com/jinzhu/gorm"
"time"
)

var (
//变量db 通过init直接初始化
db *gorm.DB
err error
dbinfo string
)

const (
//定义db的连接信息
dbuser string = "root"
dbpassword = "123456"
dbip = "39.105.114.198"
dbport = "3306"
database = "users"
)
//定义user结构体
type User struct {
//gorm model 会有createtime updatetime deletetime 分别代表创建时间 更新时间 删除时间 这里的删除是软删除 就是当你删除数据之后可以修改这个deletetime来表示此数据已经删除 不会真的删除 如果硬删除也可以
//主要是为了防止误操作删除 以及备份一段时间的数据
//这里需要注意一开始有gorm model的话就有没有的话中途应该是无法加的
//但是字段我们可以不断增加 这个字段添加之后 会根据你添加的字段在数据库的对应的表中添加字段 原数据不会消失
//这个只具备添加不具备删除字段
gorm.Model
Name string
Password string
Birthday time.Time
Tel string
Addr string
Desc string
}

//没有gormmodel 管理的话 我们需要自己通过字段来表明
//type User struct {
// Id int `gorm:"primary key ; auto increment"` // primary 表示主键 int的主键会自动增长 auto表示自增长
// Name string `gorm:"type:varchar(30);unique;not null;default:' ' "`
// Password string
// Birthday time.Time
// Tel string
// Addr string
// Desc string `gorm:"type:text;index:index_desc"`
//}

func init() {
//拼接数据库连接信息
dbinfo = fmt.Sprintf("%s:%s@(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local",dbuser,dbpassword,dbip,dbport,database)
//初始化db
db,err = gorm.Open("mysql", dbinfo)
if err != nil {
fmt.Println("mysql打开失败",err)
return
}
//创建表关联user结构体
db.AutoMigrate(&User{})
}
//这个方法是在表的时候自定义表名

func (u *User) TableName() string {
return "test"
}

func main() {
//判断表是否存在gorm会默认的在表后面加复数表示多个
//所以虽然是user结构体但是表名是users
fmt.Println(db.HasTable(&User{}))
fmt.Println(db.HasTable("users"))
//createtable可以帮助我们创建表 需要传入结构体属性
//但是这个创建只是在开始的时候创建并没有办法中途帮助我们更新
//更新的话还是需要用结构体绑定表来做
//fmt.Println(db.CreateTable(&User{}))

//删除表 可以用结构体也可以用表名
//fmt.Println(db.DropTable(&User{}))
//fmt.Println(db.DropTable("users"))

//修改字段属性
//首先获取结构体属性 并且使用ModifyColumn 为字段修改数据库表结构 的字段类型
db.Model(&User{}).ModifyColumn("Birthday","date")
//删除字段
//db.Model(&User{}).DropColumn("Birthday")
//添加索引
db.Model(&User{}).AddIndex("idx_name","name")
//添加联合索引
db.Model(&User{}).AddIndex("idx_name_addr","name","addr")
//删除索引
db.Model(&User{}).RemoveIndex("idx_name")
//设置唯一索引
db.Model(&User{}).AddUniqueIndex("idx_name","name")
db.Close()

}

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!