You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go中向带auto_increment自增主键的数据库插入数据报错解决

报错原因

报错的直接触发原因是INSERT语句的列定义数量和传入值数量不匹配:

  • 语句中声明要写入的列共4个:id、title、description、author
  • 后续VALUES子句里只写了3个占位符?,实际传入的参数也只有3个(标题、描述、作者)

列和值的数量无法一一对应,数据库就会抛出Column count doesn't match value count at row 1错误。
另外id列已经设置了auto_increment自增属性,正常业务场景下不需要手动给该字段传值,原语句把id列加入写入列清单本身就是多余的。

自增主键表的正确插入写法

常规业务场景(推荐)

插入数据时不指定自增主键列,由数据库自动生成自增id值,保证列数、占位符数、传入参数数完全匹配即可:

_, err := db.Exec("INSERT INTO blogpost (title, description, author) VALUES (?,?,?)", 
    newBlog.Title, 
    newBlog.Description, 
    newBlog.Author)

执行后如果需要拿到数据库自动生成的自增id,可以调用返回结果的LastInsertId方法获取:

if err != nil {
    // 自行处理执行错误
}
blogId, err := res.LastInsertId()

特殊场景(需手动指定id)

如果是数据迁移、历史数据导入这类必须手动指定id值的场景,需要补全对应数量的占位符和参数,保证列和值一一对应:

// customId为需要手动写入的指定id值
_, err := db.Exec("INSERT INTO blogpost (id, title, description, author) VALUES (?,?,?,?)", 
    customId,
    newBlog.Title, 
    newBlog.Description, 
    newBlog.Author)

注意:非必要不要手动给自增主键传值,否则容易引发主键冲突、自增序列断层等问题。

内容的提问来源于stack exchange,提问作者IcanCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:30:51