Warm tip: This article is reproduced from serverfault.com, please click

sql-错误:列中的空值违反了非空约束

(sql - ERROR: null value in column violates not-null constraint)

发布于 2020-12-01 17:42:23
CREATE TABLE medico
    (num_cedula serial NOT NULL UNIQUE,
     nome varchar(20) NOT NULL,
     especialidade varchar(20) NOT NULL,
     PRIMARY KEY(num_cedula));

CREATE TABLE consulta
    (num_cedula serial NOT NULL,
     num_doente serial NOT NULL,
     data_consulta date NOT NULL,
     nome varchar(20) NOT NULL,
     CHECK(EXTRACT(DOW FROM data_consulta) NOT IN (6,0)),
     UNIQUE(num_doente,data_consulta,nome),
     FOREIGN KEY(nome) REFERENCES instituicao(nome) ON UPDATE CASCADE,
     FOREIGN KEY(num_cedula) REFERENCES medico(num_cedula) ON UPDATE CASCADE,
     PRIMARY KEY(num_cedula,num_doente,data_consulta));

CREATE TABLE analise
    (num_analise serial NOT NULL UNIQUE,
     especialidade varchar(20) NOT NULL,
     num_cedula serial ,
     num_doente serial ,
     data_analise date ,
     data_registo date NOT NULL,
     nome varchar(20) NOT NULL,
     quant integer NOT NULL,
     inst varchar(20) NOT NULL,
     CONSTRAINT fk_analise FOREIGN KEY(num_cedula,num_doente,data_analise) REFERENCES consulta(num_cedula,num_doente,data_consulta) ON UPDATE CASCADE,
     FOREIGN KEY(inst) REFERENCES instituicao(nome) ON UPDATE CASCADE,
     PRIMARY KEY(num_analise)); 

这是我的代码,但是当我尝试使用num_cedula,num_doente,data_analise作为NULL插入另一个“ analise”时,会出现此错误(“ ERROR:列“ num_cedula”中的null值违反了非null约束详细信息:失败行包含(32 ,Ortopedia,null,null,null,2019年12月2日,glicemia,176,Instituicao1)。SQL状态:23502“),我真的不知道为什么。另外,这是我使用的插入代码:

INSERT INTO analise VALUES(32,'Ortopedia',NULL,NULL,NULL,'2019-12-02','glicemia',176,'Instituicao1');
Questioner
tomaslb26
Viewed
0
GMB 2020-12-02 02:17:46

serial数据类型只是不允许null值。文档说明了声明serial(强调是我的)时在幕后发生的事情

因此,我们创建了一个整数列,并安排其默认值从序列生成器中分配。NOT NULL约束被施加,以确保空值不能被插入。

我不认为你真的要serial在这里。该数据类型的用例是创建一个自动递增的列。你可能可以int改用它,这样可以避免你遇到的问题。