gorm.DeletedAt
gorm.DeletedAt是 GORM 用于实现软删除的特殊类型基于sql.NullTime或gorm.io/datatypes中的实现。基本特性表格特性说明类型本质sql.NullTime的扩展包含Time time.Time和Valid bool零值Validfalse表示记录未被删除删除时设置当前时间Validtrue查询时GORM 自动过滤Validtrue已删除的记录定义与使用goimport ( gorm.io/gorm time ) type User struct { ID uint gorm:primaryKey Name string CreatedAt time.Time UpdatedAt time.Time DeletedAt gorm.DeletedAt gorm:index // 软删除字段 }基本操作软删除不真正删除数据go// 删除用户设置 deleted_at 为当前时间 db.Delete(user) // SQL: UPDATE users SET deleted_at2026-07-24 08:23:00 WHERE id 1 // 批量软删除 db.Where(age ?, 60).Delete(User{})查询自动排除已删除go// 普通查询自动加 deleted_at IS NULL db.Find(users) // SQL: SELECT * FROM users WHERE deleted_at IS NULL db.First(user, 1) // SQL: SELECT * FROM users WHERE id 1 AND deleted_at IS NULL查询包含已删除的记录go// 使用 Unscoped 绕过软删除过滤 db.Unscoped().Find(users) // 查全部 db.Unscoped().First(user, 1) // 查单条包括已删除 // 只查已删除的 db.Unscoped().Where(deleted_at IS NOT NULL).Find(users)恢复软删除的记录go// 先找到记录包含已删除的 db.Unscoped().First(user, 1) // 恢复将 deleted_at 设为 NULL db.Model(user).Update(deleted_at, nil) // 或 db.Model(user).Update(deleted_at, gorm.DeletedAt{})永久删除go// 必须加 Unscoped否则只是软删除 db.Unscoped().Delete(user) // SQL: DELETE FROM users WHERE id 1与 null.Time 的关系go// gorm.DeletedAt 本质上就是 sql.NullTime 的别名扩展 type DeletedAt sql.NullTime // 所以它有 deletedAt.Time // 删除时间 deletedAt.Valid // true已删除, false未删除自定义软删除字段名gotype User struct { ID uint gorm:primaryKey Name string DeletedAt gorm.DeletedAt gorm:index;column:deleted_time // 自定义列名 }注意事项表格注意点说明必须加gorm:index否则查询性能差因为大部分查询都要过滤deleted_at IS NULL关联查询关联模型也会自动过滤已删除记录唯一索引软删除场景下唯一索引需要包含deleted_at否则删除后无法插入相同数据不兼容db.RowsAffected软删除返回的 RowsAffected 是更新数不是删除数唯一索引处理常见问题go// ❌ 错误这样删除后再插入相同 email 会报唯一冲突 type User struct { ID uint gorm:primaryKey Email string gorm:uniqueIndex DeletedAt gorm.DeletedAt gorm:index } // ✅ 正确唯一索引包含 deleted_at type User struct { ID uint gorm:primaryKey Email string gorm:uniqueIndex:idx_email_deleted DeletedAt gorm.DeletedAt gorm:uniqueIndex:idx_email_deleted }总结表格操作方法软删除db.Delete(user)查未删除db.Find(users)自动过滤查全部db.Unscoped().Find(users)恢复db.Model(user).Update(deleted_at, nil)永久删除db.Unscoped().Delete(user)

相关新闻

Hi-Res无损音质与经典动画重制:技术原理与体验升级

Hi-Res无损音质与经典动画重制:技术原理与体验升级

第一次看到“哆啦A梦《科学超电磁炮经典回溯》合辑【Hi-Res无损音质】纯享版”这个标题时,我愣了一下——这两个看似毫不相关的IP怎么会出现在同一个作品里?是粉丝混剪、官方联动,还是某种新的内容形态?更让我好奇的是&#xff0c…

2026/7/24 10:52:38 阅读更多 →
AI开发核心术语速查:Prompt、Context与Memory实战指南

AI开发核心术语速查:Prompt、Context与Memory实战指南

1. 项目概述在AI应用开发领域,掌握核心术语是高效工作的基础。这个术语速查表项目旨在为开发者提供一份关于Prompt(提示词)、Context(上下文)、Memory(记忆)和Tools(工具&#xff09…

2026/7/24 10:52:38 阅读更多 →
Claude API开发指南:对话AI集成与优化实践

Claude API开发指南:对话AI集成与优化实践

1. Claude API 概述 Claude API 是当前最先进的对话式 AI 接口之一,它基于 Anthropic 公司研发的大语言模型技术构建。作为一名长期从事 AI 应用开发的工程师,我认为这套 API 最吸引人的地方在于其出色的推理能力和自然的对话体验。不同于简单的问答机器…

2026/7/24 10:52:38 阅读更多 →

最新新闻

高速ADC性能解析:从开关特性到典型特性,以ADC12DJ5200RF为例

高速ADC性能解析:从开关特性到典型特性,以ADC12DJ5200RF为例

1. 高速ADC性能参数解析:从开关特性到典型特性在雷达、通信、高端测试测量这些对信号保真度要求极高的领域,高速模数转换器(ADC)的性能直接决定了整个系统的“天花板”。我们经常讨论信噪比(SNR)、无杂散动…

2026/7/24 10:58:40 阅读更多 →
开源大语言模型算力投入与本地部署实践指南

开源大语言模型算力投入与本地部署实践指南

Stability AI 创始人近期回顾了公司发展历程,透露其算力资源主要投入于开源大语言模型(LLM)的构建,而非选择短期商业化的“捷径”。这一策略直接影响了开源社区的技术演进路径,尤其体现在 GPT-J 等模型的迭代过程中。对…

2026/7/24 10:58:40 阅读更多 →
ADS8598H高精度多通道数据采集系统:过采样原理与电力自动化应用

ADS8598H高精度多通道数据采集系统:过采样原理与电力自动化应用

1. 项目概述:高精度多通道数据采集的挑战与机遇在工业自动化、电力监控和精密测试测量领域,构建一个高精度、多通道同步的数据采集系统(DAQ)一直是工程师面临的核心挑战。这类系统的核心任务,是将现实世界中的连续模拟…

2026/7/24 10:58:40 阅读更多 →
MSP432E401Y工业物联网MCU实战:从架构解析到以太网、USB、加密开发

MSP432E401Y工业物联网MCU实战:从架构解析到以太网、USB、加密开发

1. 从数据手册到实战:MSP432E401Y为何是工业物联网的“多面手”在嵌入式开发领域,选型往往是一场性能、成本与外设的“博弈”。当你面对一个需要实时控制、网络连接、数据采集,甚至还要兼顾安全加密的工业物联网项目时,传统的单片…

2026/7/24 10:58:40 阅读更多 →
三相电表设计:AMC1106隔离式Δ-Σ调制器原理与应用详解

三相电表设计:AMC1106隔离式Δ-Σ调制器原理与应用详解

1. 项目概述:为什么三相电表设计需要AMC1106?在工业级三相电能计量领域,电流采样方案的选择直接决定了电表的长期精度、可靠性和抗干扰能力。过去,电流互感器因其固有的电气隔离特性而被广泛使用,但它有一个致命的弱点…

2026/7/24 10:58:40 阅读更多 →
LP8754多相降压转换器寄存器配置实战与电源管理优化

LP8754多相降压转换器寄存器配置实战与电源管理优化

1. 项目概述:从芯片手册到实战配置如果你正在为一块高性能的处理器或FPGA设计供电电路,面对动辄几十安培的峰值电流需求,单相降压转换器往往力不从心。纹波电流大、效率低、瞬态响应慢,这些痛点催生了多相降压转换器的广泛应用。我…

2026/7/24 10:57:40 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻