GORM—删

简介: GORM—删

如果有DeletedAt *time.Time sql:"index",其实是软删除

删除记录

删除记录时,请确保主键字段有值,GORM 会通过主键去删除记录,如果主键为空,GORM 会删除该 model 的所有记录。

  // 删除现有记录
  db.Delete(&email)
  // DELETE from emails where id=10;
  // 为删除 SQL 添加额外的 SQL 操作
  db.Set("gorm:delete_option", "OPTION (OPTIMIZE FOR UNKNOWN)").Delete(&email)
  // DELETE from emails where id=10 OPTION (OPTIMIZE FOR UNKNOWN);

批量删除

删除全部匹配的记录

  // DELETE from emails where email LIKE "%wxf%";
  db.Where("email LIKE ?", "%wxf%").Delete(Email{})
  // DELETE from emails where email LIKE "%wxf%";
  db.Delete(Email{}, "email LIKE ?", "%wxf%")

软删除

如果一个 model 有 DeletedAt 字段,他将自动获得软删除的功能! 当调用 Delete 方法时, 记录不会真正的从数据库中被删除, 只会将DeletedAt 字段的值会被设置为当前时间

  // UPDATE users SET deleted_at="2013-10-29 10:23" WHERE id = 111;
  db.Delete(&user)
  // 批量删除
  // UPDATE users SET deleted_at="2013-10-29 10:23" WHERE age = 20;
  db.Where("age = ?", 20).Delete(&User{})
  // 查询记录时会忽略被软删除的记录
  // SELECT * FROM users WHERE age = 20 AND deleted_at IS NULL;
  db.Where("age = 20").Find(&user)
  // Unscoped 方法可以查询被软删除的记录
  // SELECT * FROM users WHERE age = 20;
  db.Unscoped().Where("age = 20").Find(&users)

物理删除

  // Unscoped 方法可以物理删除记录
  // DELETE FROM orders WHERE id=10;
  db.Unscoped().Delete(&order)
  // DELETE FROM orders WHERE id=10 and age = 20;
  db.Unscoped().Where("age = 20").Delete(&order)
目录
相关文章
|
存储 SQL 安全
Golang底层原理剖析之上下文Context
Golang底层原理剖析之上下文Context
278 0
|
编解码 Linux 开发工具
ffmpeg的基本用法(下)
ffmpeg的基本用法的下篇来喽!
1248 0
|
9月前
|
SQL JSON 关系型数据库
开箱即用的GO后台管理系统 Kratos Admin - 列表查询规则
Kratos Admin 是一个开箱即用的GO后台管理系统,支持通用列表查询请求。通过 `page`、`pageSize`、`query`(AND过滤)、`or`(OR过滤)、`orderBy`(排序)、`noPaging`(不分页)和 `fieldMask`(字段掩码)等参数,灵活配置查询条件。过滤规则遵循Python ORM风格,支持多种查找类型如 `in`、`gte`、`icontains` 等,适用于不同数据库。
151 1
|
10月前
|
存储 安全 Go
Go语言中的map数据结构是如何实现的?
Go 语言中的 `map` 是基于哈希表实现的键值对数据结构,支持快速查找、插入和删除操作。其原理涉及哈希函数、桶(Bucket)、动态扩容和哈希冲突处理等关键机制,平均时间复杂度为 O(1)。为了确保线程安全,Go 提供了 `sync.Map` 类型,通过分段锁实现并发访问的安全性。示例代码展示了如何使用自定义结构体和切片模拟 `map` 功能,以及如何使用 `sync.Map` 进行线程安全的操作。
286 9
|
搜索推荐 开发者
如何在 Elasticsearch 中选择精确 kNN 搜索和近似 kNN 搜索
【6月更文挑战第8天】Elasticsearch 是一款强大的搜索引擎,支持精确和近似 kNN 搜索。精确 kNN 搜索保证高准确性但计算成本高,适用于对精度要求极高的场景。近似 kNN 搜索则通过牺牲部分精度来提升搜索效率,适合大数据量和实时性要求高的情况。开发者应根据业务需求和数据特性权衡选择。随着技术发展,kNN 搜索将在更多领域发挥关键作用。
535 4
|
11月前
|
Prometheus Cloud Native Linux
Prometheus+Grafana新手友好教程:从零开始搭建轻松掌握强大的警报系统
本文介绍了使用 Prometheus 和 Grafana 实现邮件报警的方案,包括三种主要方法:1) 使用 Prometheus 的 Alertmanager 组件;2) 使用 Grafana 的内置告警通知功能;3) 使用第三方告警组件如 OneAlert。同时,详细描述了环境准备、Grafana 安装配置及预警设置的步骤,确保用户能够成功搭建并测试邮件报警功能。通过这些配置,用户可以在系统或应用出现异常时及时收到邮件通知,保障系统的稳定运行。
1360 1
|
前端开发
浏览器接收Long型数据精度丢失问题的解决方案
浏览器接收Long型数据精度丢失问题的解决方案
|
Go
Golang语言结构体(struct)面向对象编程进阶篇(封装,继承和多态)
这篇文章是关于Go语言中结构体(struct)面向对象编程进阶篇的教程,涵盖了Go语言如何实现封装、继承和多态,以及结构体内存布局的相关概念和案例。
463 4
|
前端开发 JavaScript 网络架构
React 中的箭头函数是什么?如何使用?
【8月更文挑战第30天】
268 3
|
API
【Ant Design Pro】使用ant design pro做为你的开发模板(九)开发第一个完整的后台页面(二)
【Ant Design Pro】使用ant design pro做为你的开发模板(九)开发第一个完整的后台页面(二)
1213 0
【Ant Design Pro】使用ant design pro做为你的开发模板(九)开发第一个完整的后台页面(二)