Day06:GORM快速入门03 删除| 青训营

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Day06:GORM快速入门03 删除| 青训营

导读

本套笔记是学习完Gin框架之后的下一个阶段,通过Gin框架我们可以很方便的和前端进行交互,下一步就是和数据库进行交互,这就需要使用GORM。本套笔记就是带你快速上手GORM,学习完这个之后就可以完成大项目的开发了,后续还会进行大项目的讲解开发,制作不易,喜欢的就点个关注吧。

本套课程基于GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.进行讲解,是对这个的补充解释说明。

注意

代码详解大部分是注释的形式给出,请留意代码注释。

GORM介绍

GORM(Go Object Relational Mapping)是一个在 Go 语言中使用的优秀的 ORM(对象关系映射)库。它提供了简单且强大的 API,使开发人员能够轻松地与数据库进行交互

删除一条记录

我们的数据库里面有这样的一个记录

image.png

要删除的话只需要书写

result := db.Where("name = ?", "jinzhu").Delete(&Email{})

完整代码

package main  
import (  
"fmt"  
"gorm.io/driver/mysql"  
"gorm.io/gorm"  
)  
type Email struct {  
ID uint  
Name string  
Email string  
} //Email的表  
func main() {  
db, _ := gorm.Open(mysql.New(mysql.Config{  
DSN: "root:Lycdemima1@@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local", // DSN data source name  
DefaultStringSize: 256, // string 类型字段的默认长度  
DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持  
DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引  
DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列  
SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置  
}), &gorm.Config{}) //连接数据库  
result := db.Where("name = ?", "jinzhu").Delete(&Email{})//删除记录  
fmt.Println(result)  
}

运行之后我们就会发现记录被删除了

根据主键删除

GORM 允许通过主键来删除对象,它可以使用数字

db.Delete(&User{}, 10)//删除id为10的记录
db.Delete(&User{}, "10")//删除id为10的记录
db.Delete(&users, []int{1,2,3})//删除id为1,2,3的记录

钩子函数

删除之前运行

func (u *User) BeforeDelete(tx *gorm.DB) (err error) {
    if u.Role == "admin" {
        return errors.New("admin user not allowed to delete")
    }
    return
}

删除之后运行

func (u *User) AfterDelete(tx *gorm.DB) (err error) {
    if u.Role == "admin" {
        return errors.New("admin user not allowed to delete")
    }
    return
}

软删除

软删除是一种在数据库中标记记录为已删除而不是实际删除的技术

通常是一个名为 deleted 或类似的字段

如果你的模型包含了 gorm.DeletedAt字段(该字段也被包含在gorm.Model中),那么该模型将会自动获得软删除的能力。

type User struct {
  ID      int
  Deleted gorm.DeletedAt
  Name    string
}

当调用Delete时,GORM并不会从数据库中删除该记录,而是将该记录的DeleteAt设置为当前时间,而后的一般查询方法将无法查找到此条记录

查找被软删除的记录

可以使用Unscoped来查询到被软删除的记录

db.Unscoped().Where("age = 20").Find(&users) //找到这一条数据

永久删除

可以使用 Unscoped来永久删除匹配的记录

//"condition_column" 是用于指定删除条件的列名,"conditionValue" 是该列的值
db.Unscoped().Where("condition_column = ?", conditionValue).Delete(&Model{})
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 关系型数据库 MySQL
【MySQL入门到精通-黑马程序员】MySQL基础篇-函数
SELECT 函数(参数); 注:SUBSTRING(str,start,len);中str的索引从1开始,即start最小为1。
71 0
【MySQL入门到精通-黑马程序员】MySQL基础篇-函数
|
6月前
|
关系型数据库 MySQL
mysql基础教程
mysql基础教程
20 0
|
6月前
|
存储 关系型数据库 MySQL
|
前端开发 Go API
Day08:GORM快速入门07 has many| 青训营
Day08:GORM快速入门07 has many| 青训营
|
前端开发 Go API
Day07:GORM快速入门04 查找| 青训营
Day07:GORM快速入门04 查找| 青训营
|
SQL 关系型数据库 MySQL
MySQL基础入门教程
MySQL小白基础入门教程
196 1
|
存储 前端开发 数据库连接
Day07:GORM快速入门05 更新| 青训营
Day07:GORM快速入门05 更新| 青训营
|
SQL 存储 Oracle
Mysql基础教程
Mysql基础教程
106 1
|
前端开发 关系型数据库 MySQL
Day06:GORM快速入门02 增加| 青训营
Day06:GORM快速入门02 增加| 青训营
|
前端开发 Go API
Day08:GORM快速入门08 many to many| 青训营
Day08:GORM快速入门08 many to many| 青训营
下一篇
无影云桌面