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

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