首页/ 学科题库/ gorm/ 软删除机制专题
gorm 专题精讲

软删除机制专题

1 篇文章 16 道配套习题

软删除机制专题

专题说明

本专题深入讲解 GORM 软删除机制,包括 gorm.DeletedAt 字段配置、软删除与硬删除的切换、Unscoped 查询已删除记录、恢复软删除数据,以及软删除在关联查询和唯一约束中的行为,确保数据可追溯与安全恢复。

学习目标

  1. 掌握软删除的配置方式和底层 SQL 行为
  2. 学会使用 Unscoped 查询和恢复已删除记录
  3. 理解软删除与硬删除的切换场景
  4. 掌握软删除在关联查询和唯一约束中的影响

学习内容

本专题涵盖以下知识点:

  • gorm.DeletedAt 字段与自动迁移
  • 软删除的底层 SQL 转换
  • Unscoped 查询已删除数据
  • 恢复(Restore)软删除记录
  • 软删除与唯一索引的冲突处理
  • 级联软删除

学习建议

  1. 软删除会在所有查询中自动追加 WHERE deleted_at IS NULL 条件
  2. 唯一索引需考虑软删除记录的冲突问题
  3. 恢复数据时注意关联记录的状态一致性

配套习题(16 题)

参考答案在文末
判断题
1
判断题

包含 DeletedAt 字段的模型,查询时 GORM 会自动添加 WHERE deleted_at IS NULL 条件。

A

对

B

错

2
判断题

db.Unscoped().Where("status = ?", 0).Delete(&User{}) 会物理删除所有匹配记录。

A

对

B

错

单选题
3
单选题

如何监控 GORM 连接池的状态(如空闲连接数、活跃连接数)?

A

使用 db.Stats() 方法获取 sql.DBStats

B

使用 db.PoolStats() 方法

C

查询数据库系统表

D

查看 GORM 日志输出

4
单选题

如何监控 GORM 连接池的状态(如空闲连接数、活跃连接数)?

A

使用 db.Stats() 方法获取 sql.DBStats

B

使用 db.PoolStats() 方法

C

查询数据库系统表

D

查看 GORM 日志输出

5
单选题

在 GORM 中对软删除的模型执行真正的物理删除,应该使用什么方法?

A

Delete() 方法

B

Unscoped().Delete() 方法

C

HardDelete() 方法

D

ForceDelete() 方法

6
单选题

GORM 的底层连接池是基于哪个 Go 标准库实现的?

A

database/sql

B

net/http

C

sync.Pool

D

container/list

7
单选题

GORM 的底层连接池是基于哪个 Go 标准库实现的?

A

database/sql

B

net/http

C

sync.Pool

D

container/list

8
单选题

GORM 的底层连接池是基于哪个 Go 标准库实现的?

A

database/sql 库

B

net/http 库

C

sync.Pool 库

D

container/list 库

9
单选题

在 GORM 中恢复一条软删除的记录,正确的做法是?

A

使用 Unscoped 找到记录后,将 DeletedAt 设置为 nil 并 Save

B

使用 db.Restore() 方法

C

使用 db.Undelete() 方法

D

软删除的记录无法恢复

10
单选题

在 GORM 中对软删除的模型执行真正的物理删除,应该使用什么方法?

A

db.Delete()

B

db.Unscoped().Delete()

C

db.HardDelete()

D

db.ForceDelete()

11
单选题

实现软删除应该使用什么字段类型?

A

time.Time

B

*time.Time

C

gorm.DeletedAt

D

int64

12
单选题

在 GORM 中对软删除的模型执行真正的物理删除,应该使用什么方法?

A

db.Delete()

B

db.Unscoped().Delete()

C

db.HardDelete()

D

db.ForceDelete()

13
单选题

如何查询包含已删除记录的所有数据?

A

db.Find(&users)

B

db.Unscoped().Find(&users)

C

db.IncludeDeleted().Find(&users)

D

db.Where("deleted_at IS NOT NULL").Find(&users)

14
单选题

在 GORM 中恢复一条软删除的记录,正确的做法是?

A

使用 Unscoped 找到记录后,将 DeletedAt 设置为 nil 并 Save

B

使用 db.Restore() 方法

C

使用 db.Undelete() 方法

D

软删除的记录无法恢复

15
单选题

如何执行真正的物理删除(硬删除)?

A

db.Delete(&user)

B

db.Unscoped().Delete(&user)

C

db.HardDelete(&user)

D

db.PermanentDelete(&user)

多选题
16
多选题

以下哪些查询会包含已删除的记录?

A

db.Unscoped().Where("name = ?", "A").Find(&users)

B

db.Where("name = ?", "A").Find(&users)

C

db.Unscoped().First(&user, 1)

D

db.Select([]string{"name", "id"}).Find(&users)

参考答案
1.正确 2.正确 3.A 4.A 5.B 6.A 7.A 8.A 9.A 10.B 11.C 12.B 13.B 14.A 15.B 16.A;C
想在手机上刷这套专题的真题?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别二维码,即可解锁本专题全部配套练习与错题本。
了解产品 App
← 上一个专题 生态与工具链专题 下一个专题 → 钩子函数与回调机制专题