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

填充现有行剩余字段及避免非空约束违规问题咨询

问题分析与解决方案

嘿,我一眼就发现问题出在哪了!你现在用的INSERT语句是用来插入全新的数据库记录的,但你的实际需求是更新已经存在的、id为1和2的那两条记录的字段——这完全是两种不同的操作,难怪会报错!

为什么你的INSERT语句会报错?

你的id字段是主键且带有NOT NULL约束,执行这条INSERT语句时,你没有提供id的值,数据库会尝试创建两条没有id值的新记录。这直接违反了id的非空约束(主键本身也要求唯一且非空),所以数据库必然会抛出错误。

正确的操作:用UPDATE更新已有记录

要填充那两行的剩余字段,你需要使用UPDATE语句,下面给你两种常用的实现方式:

方式一:分两次单独更新(直观易懂)

-- 更新id=1的记录
UPDATE new_table 
SET field1 = 'value1', field2 = 'value2', field3 = 'value3'
WHERE id = 1;

-- 更新id=2的记录
UPDATE new_table 
SET field1 = 'value4', field2 = 'value5', field3 = 'value6'
WHERE id = 2;

方式二:用CASE语句批量更新(适合一次处理多条记录)

如果需要更新的记录更多,这种方式更高效:

UPDATE new_table
SET 
    field1 = CASE id 
                WHEN 1 THEN 'value1' 
                WHEN 2 THEN 'value4' 
             END,
    field2 = CASE id 
                WHEN 1 THEN 'value2' 
                WHEN 2 THEN 'value5' 
             END,
    field3 = CASE id 
                WHEN 1 THEN 'value3' 
                WHEN 2 THEN 'value6' 
             END
WHERE id IN (1, 2); -- 限定只更新这两行,避免误操作其他记录

补充:如果确实要插入新记录该怎么做?

要是之后你需要添加新的行,记得要给id字段赋值(如果id是自增主键,数据库会自动生成值,你可以省略id字段):

-- 当id是自增主键时,插入新记录可省略id
INSERT INTO new_table (field1, field2, field3) VALUES ('value7', 'value8', 'value9');

-- 如果id不是自增,必须显式指定id值
INSERT INTO new_table (id, field1, field2, field3) VALUES (3, 'value7', 'value8', 'value9');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:28:03