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

SQL插入数据报错:主键列不允许NULL值且无法设置空属性

问题原因

CustomerID是Customers表的主键列,关系型数据库的主键有硬性规则:值不能为NULL、不能重复,作用是唯一标识表里的每一行记录。你改列属性时碰到的"null property cannot be set on a column which is part of the primary key"报错,是数据库的底层保护机制——主键从设计上就不允许为NULL,根本改不了这个属性,不是你操作步骤错了。

解决方案

根据你这张表的主键设计逻辑,选一种方式处理就行:

  • 手动赋值主键:如果CustomerID是业务侧生成的编码(比如你用的Northwind样例库里,这个字段本来就是存5位长度的客户简码),插入数据的时候必须显式给这个字段传非空、不重复的值,改完的插入语句参考:
INSERT INTO Customers (CustomerID, contactname, City, Country)
VALUES ('CARD', 'Cardinal', 'Stavanger', 'Norway');
  • 数据库自动生成主键:如果不想每次手动传CustomerID,就给这个主键列配置自动生成规则,不同数据库的配置语法不一样:
    • SQL Server:给列加IDENTITY(起始值,增量)属性,比如设为IDENTITY(1,1)就会从1开始,每次新增记录自动加1生成唯一ID
    • MySQL:给列加AUTO_INCREMENT属性
    • PostgreSQL:把列类型设为SERIAL,或者配置GENERATED AS IDENTITY规则
      配置完成后,你最开始写的那条不带CustomerID的插入语句就能正常执行,数据库会自动补全合法的主键值,不会再报空值错误。
避坑提醒

别想着绕开主键的非空约束,主键要是能存NULL,就没法唯一标识单条记录,后续做多表关联、数据更新/删除的时候,很容易出现大面积数据错乱的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:36:27