微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用PostgreSQL中的ALTER TABLE将外键约束添加到同一个表中

要创建表我使用:
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,用于顶级类别.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐