首页/ 学科题库/ gorm/ 事务处理专题
gorm 专题精讲

事务处理专题

1 篇文章 20 道配套习题

事务处理专题

专题说明

本专题深入讲解 GORM 事务处理机制,涵盖事务的创建、提交与回滚、嵌套事务与保存点(SavePoint)、事务回调与钩子、事务隔离级别,以及在并发场景下确保数据一致性的最佳实践。

学习目标

  1. 掌握 GORM 事务的三种使用方式(Transaction/Begin+Commit+Rollback)
  2. 理解嵌套事务和保存点的原理与应用场景
  3. 学会处理事务中的错误和异常情况
  4. 掌握事务隔离级别及其对并发控制的影响

学习内容

本专题涵盖以下知识点:

  • Transaction 闭包方式事务
  • Begin/Commit/Rollback 手动事务
  • 嵌套事务与 SavePoint/RollbackTo
  • 事务中的钩子与回调
  • 事务隔离级别配置
  • 事务超时与锁机制

学习建议

  1. 优先使用 Transaction 闭包方式,自动处理提交和回滚
  2. 理解不同隔离级别的性能与一致性权衡
  3. 注意事务中的长耗时操作可能导致连接占用

配套习题(20 题)

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

如果某个字段有唯一索引,使用软删除后,删除的记录不能再次使用相同的值插入。

A

对

B

错

2
判断题

使用 db.Begin() 开始事务后,如果忘记调用 tx.Commit(),事务会自动回滚。

A

对

B

错

3
判断题

MySQL InnoDB 引擎默认使用 RepeatableRead 隔离级别。

A

对

B

错

4
判断题

GORM 的 Session 可以用来传递事务状态,多个方法共用同一个 Session 就共用同一个事务连接。

A

对

B

错

单选题
5
单选题

ReadCommitted 隔离级别可以避免以下哪些问题?

A

脏读

B

不可重复读

C

幻读

D

脏写

6
单选题

如何查询包括已删除的所有记录?

A

db.Find(&users)

B

db.Unscoped().Find(&users)

C

db.IncludeDeleted().Find(&users)

D

db.All(&users)

7
单选题

GORM 如何实现嵌套事务(保存点)?

A

使用 tx.Begin() 嵌套

B

使用 tx.SavePoint("name") 和 tx.RollbackTo("name")

C

使用 tx.NestedTransaction()

D

GORM 不支持嵌套事务

8
单选题

在 GORM 中,如何开始一个事务?

A

db.Begin()

B

db.StartTransaction()

C

db.Transaction(func(tx *gorm.DB) error { ... })

D

以上都是

9
单选题

GORM 中实现软删除最简单的方式是什么?

A

手动实现 IsDeleted 字段

B

使用 gorm.DeletedAt 类型

C

使用 BeforeDelete 钩子

D

使用数据库触发器

10
单选题

在 GORM 中,如何在多个方法之间传递同一个事务?

A

使用全局变量传递 tx 对象

B

使用 db.WithContext(ctx) 传递上下文

C

使用 Session 传递事务配置

D

GORM 不支持事务传递

11
单选题

以下哪个是 SQL 标准定义的事务隔离级别中,最低的隔离级别?

A

ReadUncommitted

B

ReadCommitted

C

RepeatableRead

D

Serializable

多选题
12
多选题

以下哪些场景适合使用嵌套事务(保存点)?

A

批量操作中某条记录失败需要回滚

B

需要在事务中尝试多个操作,失败则回退某步

C

所有操作必须全部成功或全部失败

D

需要在事务中间点设置恢复点

13
多选题

以下哪些是在 GORM 中传递事务的推荐方式?

A

将 tx 作为参数传递给 Service 方法

B

使用 context.Context 存储事务

C

使用 db.Session(&Session{NewDB: true})

D

使用全局变量存储事务

14
多选题

使用 gorm.DeletedAt 实现软删除后,以下哪些操作会受到影响?

A

普通查询自动过滤已删除记录

B

Delete 操作变为更新 DeletedAt

C

唯一索引需要考虑 DeletedAt

D

Count 统计不包含已删除记录

15
多选题

以下关于 GORM 事务使用的描述,哪些是正确的?

A

db.Transaction 方法会自动处理 Commit 和 Rollback

B

手动事务需要调用 tx.Commit() 或 tx.Rollback()

C

事务中的错误应该返回 error,由 Transaction 方法处理

D

事务只能包含单个数据库操作

16
多选题

以下哪些场景需要使用 Unscoped() 方法?

A

查询已删除的记录用于审计

B

执行硬删除操作

C

恢复已删除的记录

D

统计包括已删除的总记录数

填空题
17
填空题

在 GORM 中设置事务隔离级别可以使用 db.Session(&gorm.Session{: true}).() 后执行原生 SQL 设置,或使用数据库特定的配置方法。

18
填空题

使用 tx.SavePoint("") 创建保存点后,可以使用 tx.RollbackTo("") 回滚到该点,而不影响保存点之前的操作。

19
填空题

使用 db.Transaction 时,如果函数返回则自动提交事务,如果返回则自动回滚事务。

20
填空题

GORM 对包含 DeletedAt 字段的模型,普通查询会自动添加条件,使用方法可以取消该过滤。

参考答案
1.错误 2.错误 3.正确 4.正确 5.A 6.B 7.B 8.D 9.B 10.B 11.A 12.A;B;D 13.A;B 14.A;B;C;D 15.A;B;C 16.A;B;C;D 17.PrepareStmt;Begin 18.sp1;sp1 19.nil;error 20.WHERE deleted_at IS NULL;Unscoped
想在手机上刷这套专题的真题?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别二维码,即可解锁本专题全部配套练习与错题本。
了解产品 App
← 上一个专题 GORM 基础概念专题 下一个专题 → 关联关系管理专题