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()
}
Gorm(表的操作以及索引的操作)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.