-
Notifications
You must be signed in to change notification settings - Fork 12
/
table.go
98 lines (71 loc) · 1.91 KB
/
table.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/**
*
* @author qinxuewu
* @create 19/6/24下午8:12
* @since 1.0.0
*/
package main
import (
_ "github.com/jinzhu/gorm/dialects/mysql"
"github.com/jinzhu/gorm"
"fmt"
)
type User struct {
gorm.Model
Name string
Age int
Description string
}
func main() {
mybdb,_:=gorm.Open("mysql", "root:870439570@tcp(39.108.144.143:3306)/test?charset=utf8&parseTime=True&loc=Local")
// 检查表是否存在
falg:=mybdb.HasTable(&User{})
fmt.Println(falg)
if falg == false {
fmt.Println("创建表逻辑")
// 为模型`User`创建表
//mybdb.CreateTable(&User{})
// 创建表`users'时将“ENGINE = InnoDB”附加到SQL语句
mybdb.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&User{})
updateColumn(mybdb)
deleteColumn(mybdb)
addIndex(mybdb)
}else {
fmt.Println("删除表逻辑")
// 删除模型`User`的表
mybdb.DropTable(&User{})
// 删除表`users`
//mybdb.DropTable("users")
// 删除模型`User`的表和表`products`
mybdb.DropTableIfExists(&User{}, "products")
}
}
// 删除列
func deleteColumn(db *gorm.DB) {
// 删除指定模型的列
db.Model(&User{}).DropColumn("description")
}
// 修改列
func updateColumn(db *gorm.DB) {
// 修改模型`User`的description列的数据类型为`text`
db.Model(&User{}).ModifyColumn("description", "text")
}
// 添加外建
func addForeigKey(db *gorm.DB) {
// 添加主键
// 1st param : 外键字段
// 2nd param : 外键表(字段)
// 3rd param : ONDELETE
// 4th param : ONUPDATE
db.Model(&User{}).AddForeignKey("city_id", "cities(id)", "RESTRICT", "RESTRICT")
}
func addIndex(db *gorm.DB) {
// 为`age`列添加索引
db.Model(&User{}).AddIndex("idex_age","age")
// 添加唯一索引
db.Model(&User{}).AddUniqueIndex("idx_user_name","name")
// 为多列添加唯一索引
db.Model(&User{}).AddUniqueIndex("idx_user_name_age", "name", "age")
// 删除索引
db.Model(&User{}).RemoveIndex("idx_user_name")
}