gorm.io/gorm 新增数据报错:Error 1364 (HY000): Field 'id' doesn't have a default value
时间: 2024-08-12 22:08:40 浏览: 245
go-graphql-api-boilerplate:内置Go + graphql-go + gorm的GraphQL API样板
当使用 GORM 进行数据库操作时,如果遇到 `Error 1364 (HY000): Field 'id' doesn't have a default value` 错误,这意味着你在尝试插入一条新记录时,对于某些表中定义为 `NOT NULL` 且没有设置默认值的字段(如 `id`)未提供值。在 SQL 中,`id` 通常作为主键或自增长字段,期望在插入时会自动分配一个唯一的值。
为了解决这个问题,你可以按照以下步骤操作:
1. **为 id 字段添加默认值**:如果你的数据库允许,可以在创建表的时候给 `id` 字段设置一个默认值,比如 `AUTO_INCREMENT` 或者一个固定的值。这取决于你的数据库管理系统(MySQL、PostgreSQL等)。
```sql
-- MySQL 示例
ALTER TABLE your_table MODIFY COLUMN id INT AUTO_INCREMENT PRIMARY KEY;
-- PostgreSQL 示例
ALTER TABLE your_table ALTER COLUMN id SET DEFAULT nextval('your_sequence_name::regclass');
```
2. **在插入数据时指定默认值**:在 GORM 中,你可以使用 `gorm.NewStruct()` 创建一个新的结构体实例,并用 `gorm.Create()` 方法插入数据,这样 GORM 会自动处理这些默认值。
```go
var newRecord YourModel
newRecord.Name = "Some Value"
db.Create(&newRecord) // GORM 会自动为 id 分配一个值
```
3. **在模型定义中设置默认值**:如果你希望在 GORM 模型中设置默认值,可以使用 `gorm.Field` 属性:
```go
type YourModel struct {
gorm.Model // 自动包含 GORM 的默认字段,包括 id
Name string `gorm:"default:default_value"`
}
```
请确保你执行上述步骤之一,然后再次尝试插入数据。如果有其他相关问题,请告诉我。
阅读全文