当前位置: 首页 > 知识库问答 >
问题:

错误:列中的null值违反非null约束

温镜
2023-03-14
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)); 

这是我的代码,但当我尝试插入另一个“analise”时,num\u cedula,num\u doente,data\u analise为NULL,它会给我这个错误(“错误:num\u cedula”列中的NULL值违反了非NULL约束细节:失败的行包含(32,Ortopedia,NULL,NULL,NULL,NULL,2019-12-02,glicemia,176,Instituicao1)。SQL状态:23502”),我真的不知道为什么。此外,这是我使用的插入代码:

INSERT INTO analise VALUES(32,'Ortopedia',NULL,NULL,NULL,'2019-12-02','glicemia',176,'Instituicao1');

共有1个答案

汝承载
2023-03-14

串行数据类型不允许空值。文档解释了在声明序列时引擎盖下发生的情况(重点是我的):

因此,我们创建了一个整数列,并将其默认值从序列生成器中分配。应用非空约束以确保不能插入空值。

我不认为你真的想要这里的序列号。该数据类型的用例是创建一个自动递增的列。您可能可以使用int,这样可以避免出现问题。

 类似资料: