我们可以有两个相互的外键参考吗



如果两个表A和B需要有相互的外键引用,则可以在A和B的create table语句中定义每个外键约束。我试图在pgAdmin中这样做,但显示错误。我只想核实一下这个说法是真是假。我怀疑,为了在子表中添加外键引用。它应该有父表。有人能证实这一点吗?

是的,可以有相互的外键引用,但不能仅使用create table来定义这两个引用。原因是当你定义第一个表时,第二个表还不存在,所以你不能在外键中引用它。

create table A (id serial primary key, Bid serial references B);
create table B (id serial primary key, Aid serial references A);

在创建表A:中返回此错误

架构错误:错误:关系;b";不存在

由于A创建失败,创建表B也返回错误:

架构错误:错误:关系;a";不存在

相反,您需要另一个步骤。首先创建表A,然后创建具有对表A的外键引用的表B,然后将外键添加到表A。现在表B已经存在,您可以引用它。

create table A (id serial primary key);
create table B (id serial primary key, Aid serial references A);
alter table A add Bid serial references B;

https://www.db-fiddle.com/f/gb9vo1fQy8Jty1pGdn8Q7o/0

最新更新