全部学科
Python全栈
python
NodeJS全栈
nodejs

CRUD 基础操作专题测试

18 题 40 分钟 难度:★

考察知识点

  • 创建记录(Create):Create 方法、批量创建 CreateInBatches、主键回填
  • 查询记录(Read):First/Take/Last、Where 条件、Or/And 组合、Find 查询
  • 更新记录(Update):Update 单字段、Updates 多字段、Save 保存、零值处理
  • 删除记录(Delete):Delete 方法、软删除、Unscoped 永久删除
  • 查询条件构建:链式调用、条件组合、排序分页
💡 参考答案在文末
判断题
1

db.Find(&users) 不加任何条件会查询表中的所有记录。

A

B

2

db.Save(&user) 会更新结构体中的所有字段,包括零值字段。

A

B

3

使用 Updates 方法传入结构体时,零值字段(如 0、空字符串)不会被更新到数据库。

A

B

4

使用 Delete 方法删除记录后,可以通过 result.RowsAffected 获取删除的记录数。

A

B

单选题
5

GORM 默认对包含 DeletedAt 字段的模型执行什么类型的删除?

A

硬删除,直接从数据库删除

B

软删除,将 DeletedAt 设置为当前时间

C

不执行删除,返回错误

D

将记录标记为无效状态

6

GORM 的 Update 方法和 Updates 方法的主要区别是什么?

A

Update 更新单字段,Updates 更新多字段

B

Update 需要指定列名,Updates 从结构体提取

C

Update 用于单条记录,Updates 用于批量更新

D

两者完全相同,只是命名不同

7

以下哪个是正确的 GORM Where 查询方式?

A

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

B

db.Where("name", "张三").Find(&users)

C

db.Where(name = "张三").Find(&users)

D

db.Where("name = '张三'").Find(&users)

8

db.First(&user) 如果没有找到记录,会返回什么?

A

nil

B

gorm.ErrRecordNotFound

C

空结构体

D

panic

9

db.Where(map[string]interface{}{"name": "A", "age": 18}) 的查询条件是什么?

A

name = "A" AND age = 18

B

name = "A" OR age = 18

C

只查询 name = "A"

D

只查询 age = 18

10

使用 db.Create(&user) 创建记录后,user 对象的 ID 字段会怎样?

A

保持原值不变

B

自动填充数据库返回的主键值

C

被设置为 0

D

返回错误

11

db.Where("name = ?", "A").Or("name = ?", "B").Find(&users) 的 SQL 等价语句是?

A

SELECT * FROM users WHERE name = "A" OR name = "B"

B

SELECT * FROM users WHERE name = "A" AND name = "B"

C

先查询 A 再查询 B

D

语法错误

12

db.First(&user) 和 db.Take(&user) 的主要区别是什么?

A

First 按主键排序取第一条,Take 无排序

B

First 返回错误如果有多条,Take 不返回

C

两者完全相同

D

Take 只能用于软删除模型

多选题
13

在 GORM 中,如何执行真正的物理删除(硬删除)?

A

db.Unscoped().Delete(&user)

B

db.Delete(&user, id)

C

db.Where("id = ?", id).Unscoped().Delete(&User{})

D

db.HardDelete(&user)

14

以下哪些是 GORM Delete 方法的正确调用方式?

A

db.Delete(&user, 1)

B

db.Where("id = ?", 1).Delete(&User{})

C

db.Delete(User{}, 1)

D

(&user).Delete()

15

以下哪些是 GORM 支持的批量创建方式?

A

db.Create([]User{user1, user2})

B

db.CreateInBatches(users, 100)

C

循环调用 db.Create(&u)

D

db.BulkCreate(users)

16

以下哪些是 GORM 支持的查询条件构建方式?

A

db.Where("age > ?", 18).Where("status = ?", 1)

B

db.Where("age > ? AND status = ?", 18, 1)

C

db.Where(map[string]interface{}{"age": 18, "status": 1})

D

db.Where("age > 18").Or("status = 1")

17

以下哪些是 GORM 支持的更新方式?

A

db.Model(&user).Update("name", "新值")

B

db.Model(&user).Updates(User{Name: "新值"})

C

db.Save(&user) 保存整个结构体

D

db.Update(&user) 直接更新

填空题
18

使用____________方法可以构建否定条件,如 db.Not("status = ?", 1) 等价于____________

参考答案
1.正确 2.正确 3.正确 4.正确 5.B 6.B 7.A 8.B 9.A 10.B 11.A 12.A 13.A;C 14.A;B 15.A;B;C 16.A;B;C;D 17.A;B;C 18.Not;status != 1
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
下一套试卷 → GORM 中级技能认证测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码