加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用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,用于顶级类别.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读