在 GORM(Go 语言的 ORM 库)中,.Save
和 .Create
是两个用于将数据保存到数据库的方法,但它们有不同的用途和行为。
1. .Create
- 用途: 用于插入一条新的记录到数据库中。
- 行为:
- 如果记录的主键(通常是
ID
)为零值(例如0
或nil
),GORM 会认为这是一个新记录,并生成一个新的主键值。 - 如果记录的主键已经存在,GORM 会抛出一个错误,因为它试图插入一个已经存在的记录。
- 如果记录的主键(通常是
- 返回值: 返回插入的记录和可能的错误。
user := User{Name: "Alice", Age: 30}
result := db.Create(&user)
if result.Error != nil {
// 处理错误
}
fmt.Println(user.ID) // 新插入记录的 ID
2. .Save
- 用途: 用于插入或更新一条记录。
- 行为:
- 如果记录的主键为零值,GORM 会认为这是一个新记录,并插入它。
- 如果记录的主键已经存在,GORM 会更新该记录的所有字段,无论这些字段是否被修改。
- 返回值: 返回保存的记录和可能的错误。
user := User{Name: "Alice", Age: 30}
result := db.Save(&user)
if result.Error != nil {
// 处理错误
}
fmt.Println(user.ID) // 新插入记录的 ID 或已存在记录的 ID
// 更新记录
user.Age = 31
result = db.Save(&user)
if result.Error != nil {
// 处理错误
}
总结
.Create
: 用于插入新记录,如果主键已存在则抛出错误。.Save
: 用于插入新记录或更新现有记录的所有字段。
使用场景
.Create
: 要插入一条新记录,并且不希望覆盖现有记录时。.Save
: 希望插入一条新记录或更新现有记录的所有字段时,无论主键是否存在。