如何使用PostgreSQL中的ALTER TABLE将外键约束添加到同一个表中
发布时间:2020-12-13 18:07:18 所属栏目:百科 来源:网络整理
导读:要创建表我使用: CREATE TABLE category( cat_id serial NOT NULL,cat_name character varying NOT NULL,parent_id integer NOT NULL,CONSTRAINT cat_id PRIMARY KEY (cat_id))WITH ( OIDS=FALSE);ALTER TABLE category OWNER TO pgsql; parent_id是另一个
要创建表我使用:
CREATE TABLE category ( cat_id serial NOT NULL,cat_name character varying NOT NULL,parent_id integer NOT NULL,CONSTRAINT cat_id PRIMARY KEY (cat_id) ) WITH ( OIDS=FALSE ); ALTER TABLE category OWNER TO pgsql; parent_id是另一个类别的id.现在我有一个问题:如何与其子级级联删除记录?我需要将parent_id设置为cat_id的外键. ALTER TABLE category ADD CONSTRAINT cat_cat_id_fkey FOREIGN KEY (parent_id) REFERENCES category (cat_id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE 但它落在: ERROR: insert or update on table "category" violates foreign key constraint "cat_cat_id_fkey" DETAIL: Key (parent_id)=(0) is not present in table "category".
您遇到的问题 – 层次结构顶部的类别的parent_id是什么?
如果它将为null – 它将破坏NOT NULL constratint. 如果它将是一些任意数字,如0 – 它将打破外键(如在您的示例中). 常见的解决方案 – 将NOT NULL constratint放在parent_id上,并将parent_id设置为null,用于顶级类别. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |