更新操作
Save
使用db.Save(),将这之前修改过的值保存下来
1 | db.First(&user) |
注意:保存的是所有字段,包括没更新的,包括零值
save方法会根据主键状态来判断是update还是insert:
- 当有非零主键时,先update更新字段
- 如果update后影响行数为0,说明不存在,回退执行insert
- 如果没有主键值,直接执行insert
将db.Model()和db.Save()混用会导致未定义行为
Update
update一次更新一列,需要指定Model或Table来指定操作的目标表和条件,假设传入的model指定了主键id
更新单个字段:db.Update
1 | db.Model(&user).Update("name", "jinzhu") |
更新多个字段:db.Updates
1 | db.Model(&user).Updates(User{Name: "hello", Age: 18}) |
update更新时零值会被忽略,如果想要更新成零值:
使用Select
1 | db.Model(&user).Select("Age").Updates(User{Age: 0, Name: "hello"}) |
使用map
1 | db.Model(&user).Updates(map[string]interface{}{"name": "hello", "age": 0}) |
若没有Model或Where限定条件,Update会对整张表起作用
更新选定字段
使用Select和Omit选择或忽略某些字段
1 | // 选择 Map 的字段 |