首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在PostgreSQL中使用ALTER table向同一个表添加外键约束

如何在PostgreSQL中使用ALTER table向同一个表添加外键约束
EN

Stack Overflow用户
提问于 2013-06-29 17:55:40
回答 3查看 20.2K关注 0票数 5

要创建表,我使用:

代码语言:javascript
复制
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的外键。我试试这个:

代码语言:javascript
复制
  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

但它是这样的:

代码语言:javascript
复制
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".
EN

Stack Overflow用户

发布于 2013-06-29 18:45:24

你遇到的问题--位于层次结构顶端的类别的parent_id是多少?

如果它将是null -它将中断NOT NULL构造。

如果它是像0这样的任意数字,它会破坏外键(就像你的例子一样)。

常见的解决方案是将NOT NULL表达式放在parent_id上,并将顶级类别的parent_id设置为null

票数 6
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17378946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档