gpt4 book ai didi

sql - Postgres 打破串行列上的空约束

转载 作者:行者123 更新时间:2023-11-29 14:13:15 25 4
gpt4 key购买 nike

我有一个独立创建的表,主键设置为序列类型和一个应用于表的序列,但是当我尝试插入一个值时抛出 NULL CONSTRAINT 错误并且返回看起来像 null通过了,我是否在 INSERT 语句中遗漏了什么?

用于表生成的SQL:

    DROP TABLE IF EXISTS public."Team" CASCADE;

CREATE TABLE public."Team" (
"IdTeam" serial PRIMARY KEY,
name text NOT null,
CONSTRAINT "pKeyTeamUnique" UNIQUE ("IdTeam")
);

ALTER TABLE public."Team" OWNER TO postgres;

DROP SEQUENCE IF EXISTS public."Team_IdTeam_seq" CASCADE;

CREATE SEQUENCE public."Team_IdTeam_seq"
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

ALTER TABLE public."Team_IdTeam_seq" OWNER TO postgres;

ALTER SEQUENCE public."Team_IdTeam_seq" OWNED BY public."Team"."IdTeam";

用于插入的SQL:

INSERT INTO public."Team" (name) values ('Manchester Untited');

返回错误:

ERROR:  null value in column "IdTeam" violates not-null constraint
DETAIL: Failing row contains (null, Manchester Untited).
SQL state: 23502

最佳答案

我很困惑。当列已定义为 serial 时,为什么要尝试定义自己的序列?

其次,主键约束已经是唯一的。不需要单独的唯一约束。

第三,引用标识符只会让代码更难编写和阅读。

你可以这样做:

DROP TABLE IF EXISTS public.Team CASCADE;

CREATE TABLE public.Team (
IdTeam serial PRIMARY KEY,
name text NOT null
);

INSERT INTO public.Team (name)
VALUES ('Manchester Untited');

关于sql - Postgres 打破串行列上的空约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58363211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com