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

MySQL INSERT语句未硬编码主键id报错id can't be null如何解决

解决方案

错误根本原因

你的「id can't be null」报错核心是testingTable表的主键id字段没有开启**AUTO_INCREMENT(自增)**属性:主键默认带有非空约束,没有自增属性的情况下,MySQL不会自动生成主键值,你不传id、或者传null都会触发非空约束报错。

两步解决问题

第一步:修改表结构给id添加自增属性

在MySQL Workbench中执行以下SQL修改表结构,注意把字段类型替换为你实际的id字段类型(INT/BIGINT等):

-- 如果id还没有设为主键,执行这句
ALTER TABLE testingTable MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;
-- 如果已经设过主键,执行这句即可
ALTER TABLE testingTable MODIFY COLUMN id INT AUTO_INCREMENT;

你也可以在Workbench的表设计界面,勾选id字段的「AI(Auto Increment)」复选框后保存表结构。

第二步:修正C#插入代码

你的原有代码有两个错误:

  1. 插入操作用了ExecuteReader():该方法是用来执行查询返回结果集的,写入操作要用ExecuteNonQuery()
  2. 用字符串插值拼接SQL:容易引发SQL注入风险,且容易出现日期、特殊字符格式错误,推荐用参数化查询
    修正后的代码示例:
MySqlCommand cmd = new MySqlCommand("insert into testingTable (value1, value2, value3) values (@v1, @v2, @v3)", connection);
// 参数化赋值
cmd.Parameters.AddWithValue("@v1", "test");
cmd.Parameters.AddWithValue("@v2", new DateTime(2021,1,1));
cmd.Parameters.AddWithValue("@v3", 9);

connection.Open();
// 写入操作调用ExecuteNonQuery
cmd.ExecuteNonQuery();
connection.Close();

你之前三种写法报错的原因说明

  • 写id字段传null:主键非空约束,没有自增属性时MySQL不接受null作为主键值
  • 省略id字段:没有自增属性时,所有非空且无默认值的字段必须显式传值,id不符合要求触发报错
  • 省略字段列表直接传值:表总共有4个字段,你只传3个值,字段数量不匹配直接报错,该写法本身不推荐,表结构变更后会直接失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 18:06:07