之前对数据库没有真的去上手操作,近期突然想起来了,虽然搭环境稍微有点麻烦,但总得是要跳出舒适圈的。
首先关于Navicat的使用,感觉用户体验感还是不错的。
但是首先要安装MySQL,就去到官网download,然后安装完成。
下载了Navicat,然后试用一下,首先是要测试连接一下MySQL,当环境搭配好之后,输入密码就可以连接了。随后新建一个自己的数据库。
db , err := gorm.Open("mysql","root:123456@/ginclass?charset=utf8&parseTime=True&loc=Local")
//charset -> 字符串编码
//parseTime -> 是否格式化时间
//loc -> 时区(本地Local)
if err!=nil {
panic(err)
}else {
fmt.Println("Connect Success!")
}
在连接完成后,接下来是创建表,(orm基础上的)
使用的是AutoMigrate(),主要作用就是自动迁移功能,其中要传一个结构体的实例指针地址
// HelloWorld 要创建一个表:
type HelloWorld struct{
gorm.Model // 主键
Name string
Age int
Class string
}
func main(){
...
db.AutoMigrate(&HelloWorld{})
//自动迁移功能(如不存在会自动创建一个表)传过来的是 结构体HelloWorld实例的指针地址
}
于是再看Navicat的时候,刷新后:
因为:db.AutoMigrate(&HelloWorld{})
出现了一张表
接下来就是增删改查:
增添数据:Create()
db.Create(&HelloWorld{ //创建
Name: "dog",
Age:60,
Class: "class 8",
})
刷新后:
接下来是查找:
var shoulder HelloWorld // 创建一个实例shoulder来承接查询目标
var slice [] HelloWorld
db.First(&shoulder) //查找
db.First(&shoulder,"Name = ?","dog") //条件查找
db.Find(&slice) // 查找shoulder中所有的信息 ,但是Find 承接的应该是个切片对象
db.Find(&slice,"Age > ?","21") // Age < 21 的信息
fmt.Println(slice)
fmt.Println(shoulder)、
//db.Find(&slice,"Age > ?","21")与db.Where("Age > ?","21").Find(&slice)是相等的(写法不同)
可以看出,First()是查找一条数据,而Find()则是查找所有满足的数据
db.Where("id = ?",14).First(&HelloWorld{}).Update("name","cat") //更改单条数据
db.Where("id = ?",17).First(&HelloWorld{}).Updates(HelloWorld{
Name:"CloudyTender" ,
Age: 1000,
}) //更改多条数据
db.Where("id = (?)",[]int{17,16}).Find(&[]HelloWorld{}).Updates(HelloWorld{
Name:"CloudyTender" ,
Class:"image",
Age: 1000,
}) //更改多条数据
删除功能:Unscoped()的目的是在数据库中真正删除掉
db.Where("id = ?",19).Unscoped().Delete(&HelloWorld{})
目前是单纯的增删改查和环境的熟悉和搭建,后续会继续学一下数据库的相关。