全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 6 分钟 ✍️ juanwangdev

GORM 硬删除执行

GORM 默认软删除,使用 Unscoped().Delete() 可执行真正的物理删除,本文介绍硬删除执行方法。

硬删除定义

硬删除直接从数据库移除记录,不可恢复。GORM 需显式使用 Unscoped() 才能执行物理删除:

Go
type User struct {
    ID        uint
    Name      string
    DeletedAt gorm.DeletedAt `gorm:"index"`
}

单条硬删除

Go
// 物理删除 id=1 的记录
db.Unscoped().Delete(&User{}, 1)
// 生成 SQL: DELETE FROM users WHERE id = 1

批量硬删除

Go
// 按条件批量物理删除
db.Unscoped().Where("status = ?", "expired").Delete(&User{})
// 生成 SQL: DELETE FROM users WHERE status = 'expired'

// 删除所有已软删除的记录
db.Unscoped().Where("deleted_at IS NOT NULL").Delete(&User{})

与软删除对比

方法行为SQL
db.Delete()软删除UPDATE users SET deleted_at = NOW()
db.Unscoped().Delete()硬删除DELETE FROM users

使用场景

Go
// 场景1: 清理测试数据
db.Unscoped().Where("name LIKE ?", "test_%").Delete(&User{})

// 场景2: 物理删除已软删除记录
db.Unscoped().Where("deleted_at < ?", time.Now().AddDate(0, 0, -30)).Delete(&User{})

// 场景3: 带关联删除
db.Unscoped().Select("Orders", "Profile").Delete(&user)

硬删除不可恢复,执行前务必确认数据安全或已备份。

要点总结

  • 硬删除使用 Unscoped().Delete() 执行物理删除
  • 软删除是 UPDATE 设置 DeletedAt,硬删除是 DELETE
  • 支持按条件批量硬删除
  • 硬删除不可恢复,生产环境慎用

文章存放路径:D:\git2\jwdev\articles\GORM\进阶\软删除机制\硬删除执行.md

📝 发现内容有误?点击此处直接编辑

← 上一篇 GORM 恢复已删除记录
下一篇 → GORM 软删除查询过滤
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库