[英]Adding rows to table with self-referencing foreign key
我创建了一个名为TableTest的表,其中包含两列ent
和dep
。 ent
是主键,而dep
是引用ent
的外键。 我使用以下方法创建表:
CREATE TABLE TableTest (
ent varchar(2) NOT NULL,
dep varchar(2),
PRIMARY KEY (ent),
FOREIGN KEY (dep) REFERENCES TableTest(ent)
);
我必须证明三个值(A1,A2,A3)相互依赖。 A3依赖于A1等。但是,当我尝试在表中插入一行时,例如:
INSERT INTO TableTest(ent, dep)
VALUES ('A1','A3');
我收到以下错误,并且在进行研究后,我仍然坚持如何获得此错误。 我对SQL非常陌生。
ORA-02291:违反完整性约束-找不到父密钥
任何帮助是极大的赞赏!
首先,您需要插入root value
。
> insert into TableTest values ('A1', null);
> insert into TableTest values ('A3', 'A1');
Pablo的答案还可以,但是如果您不想使用null
也可以做一些其他事情。 首先为PK
和FK
插入相同的值,然后插入关系:
insert into TableTest values ('A1', 'A1');
insert into TableTest values ('A3', 'A1');
在某些情况下,就像您发布的情况一样,循环引用(顺便说一句很好,那里没有逻辑问题)与关系完整性约束的正常工作方式相冲突。 这是因为关系完整性具有某些“方向性”功能(首先是主键,然后是外键),即使依赖关系可以是循环的,如您所见。
有几种解决方法。 最简单的方法是deferred
外键约束。 这意味着仅在您commit
时才检查约束,而不是在每个单独的insert
之后才检查约束。
另一个是在同一时间(在同一INSERT
语句中)插入所有值; 例如:
insert into tabletest(ent, dep)
select 'A1', 'A3' from dual union all
select 'A3', 'A2' from dual union all
select 'A2', 'A1' from dual
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.