MySQL插入数据报Field 'category_id' doesn't have a default value错误如何解决
问题根因
category_id是你表的主键,主键约束要求该字段必须非空且唯一。你在建表时既没有为该字段设置自动生成规则,也没有配置默认值,插入数据时未传入category_id的取值,MySQL无法填充主键字段因此抛出报错。
可行解决方案
方案1:插入时主动传入主键值
手动为category_id指定唯一值即可,示例代码:
INSERT INTO category (category_id, category_name) VALUES ("cate001", "test");
方案2:修改表结构让主键自动生成(更推荐)
一般主键使用自增整数类型更高效,不需要手动维护取值,修改表结构的命令如下:
ALTER TABLE category -- 可根据数据量调整为BIGINT类型 MODIFY COLUMN category_id INT NOT NULL AUTO_INCREMENT;
修改完成后,你原来的插入语句就可以正常执行了:
INSERT INTO category (category_name) VALUES ("test");
方案3:保留CHAR类型主键并配置自动生成的默认值
如果业务要求必须使用CHAR类型作为主键,可以给字段设置默认值为自动生成的唯一UUID:
ALTER TABLE category ALTER COLUMN category_id SET DEFAULT (UUID());
配置后插入数据时不需要传category_id,MySQL会自动生成唯一的字符串填充该字段。
注意:如果表中已经存在数据,修改
category_id字段属性前要确保现有字段值符合修改后的类型要求,避免修改失败。
内容的提问来源于stack exchange,提问作者user16827333
相关产品推荐
相关产品推荐

