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()

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章