这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天。
一、Gorm的基本使用
1、基本用法
type Product struct {
COde string
Price uint
}
func (p Product) TableName() string {
return "product"
}
func main() {
db, err := gorm.Open(mysql.Open(dsn:"user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"), &gorm.Config{})
if err != nil {
panic("...")
}
// 增
db.Create(&Product{Code:"D42", Price:100})
// 查
db.First(&product, 1)
db.First(&product, "code=?","D42")
db.Model(&product).Update("Price", 200)
db.Model(&product).Updates(map[string]interface{}{"Price":200,"Code":"F42"})
db.Delete(&product,1)
}
2、查询数据
3、删除数据
首先来区分一下什么是物理删除和软删除。
(1)逻辑删除(软删除)
逻辑删除的本质是修改操作,所谓的逻辑删除其实并不是真正的删除,而是在表中将对应的是否删除标识(is_delete)或者说是状态字段(status)做修改操作。比如0是未删除,1是删除。在逻辑上数据是被删除的,但数据本身依然存在库中。
对应的SQL语句:update 表名 set is_delete = 1 where id = 1;语句表示,在该表中将id为1的信息进行逻辑删除,那么客户端进行查询id为1的信息,服务器就不会提供信息。倘若想继续为客户端提供该信息,可将 is_delete 更改为 0 。
(2)物理删除
物理删除就是真正的从数据库中做删除操作了。
对应的SQL语句:delete from 表名 where 条件;执行该语句,即将数据库中该信息进行彻底删除,无法恢复。
关于回收站的原理,其实就是利用了逻辑删除,对于删除文件进入回收站的本质只是在操作系统的帮助下对文件加上了 某个标记,资源管理器中对含有这种标记的文件不会显示。当从回收站恢复的时候只是移除了加上的标记而已,而清空回收站就是进行了物理删除。
而商城网站,如淘宝,京东…会大量使用逻辑删除进行操作数据库。
4、事务
tx := db.Begin()
tx.Create(&User{})
tx.Rollback()
tx.Commit()
5、gorm生态