Gorm(表的操作以及索引的操作)
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() }