如果两个表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