GORM 创建记录
GORM 的 Create 方法用于将数据插入数据库,支持单条、批量插入,并自动回填主键与默认值。
定义
Create 方法接收结构体指针或切片,执行 INSERT 操作后自动填充自增主键、时间戳等字段。
语法
Go
func (db *DB) Create(value interface{}) (tx *DB)
func (db *DB) CreateInBatches(value interface{}, batchSize int) (tx *DB)
示例
插入单条记录
Go
type User struct {
gorm.Model
Name string
Age int
}
user := User{Name: "张三", Age: 25}
result := db.Create(&user)
fmt.Println(user.ID) // 自动回填主键
fmt.Println(result.Error) // 检查错误
fmt.Println(result.RowsAffected) // 影响行数
插入多条记录
Go
users := []User{
{Name: "李四", Age: 30},
{Name: "王五", Age: 28},
}
db.Create(&users)
批量插入(推荐)
Go
// 每批 100 条
db.CreateInBatches(&users, 100)
指定字段创建
Go
// 仅插入 Name 字段(忽略零值字段)
db.Select("Name", "Age").Create(&user)
// 排除某些字段
db.Omit("Age").Create(&user)
注意事项
- 必须传入结构体指针,否则无法回填主键
gorm.Model自动包含ID、CreatedAt、UpdatedAt、DeletedAt字段- 批量插入时,
Create单条 SQL 可能超过数据库限制,大数量使用CreateInBatches- 零值字段(如
Age: 0)默认不插入,需用Select显式指定或使用指针类型*intCreatedAt仅在创建时自动填充,UpdatedAt在每次更新时自动变更
要点总结
Create支持单条、批量插入,自动回填主键- 大数据量使用
CreateInBatches分批插入 - 传入指针才能获取回填的主键值
- 零值字段需用
Select显式指定或使用指针类型 gorm.Model自动管理时间戳字段
📝 发现内容有误?点击此处直接编辑