postgresql 如何在创建表时将外键添加到在其之后创建的表中?

fkvaft9z  于 2023-04-20  发布在  PostgreSQL
关注(0)|答案(2)|浏览(149)

当我想在第一个表中添加一个外键,并引用第二个表的主键时,它是如何工作的?

CREATE TABLE table1
(   
    name_id INT NOT NULL,
    team TEXT REFERENCES table2(team_id),
    PRIMARY KEY(name_id)
);

CREATE TABLE table2
(
    team_id INT NOT NULL,
    teamname TEXT,
    PRIMARY KEY(team_id)
);

如果我尝试上面的代码,我会得到以下错误:
错误:关系“”不存在

zzwlnbp8

zzwlnbp81#

下面是创建带有外键的表的语法:

CREATE TABLE table11
(   
    name_id INT NOT NULL,
    team INT,
    PRIMARY KEY(name_id),
    foreign key(team) references table22(team_id)
);


CREATE TABLE table22
(
    team_id INT NOT NULL,
    teamname TEXT,
    PRIMARY KEY(team_id)
);

但是还有另一个问题.一个外键从一个子表不能引用一个主键从一个父文件夹如果他们不包含相同的类型.在你的代码团队是TEXT和团队_id是INT这不能.

evrscar2

evrscar22#

或者先创建第二个表。或者使用alter table。也就是说,创建第一个表而不使用引用,然后执行以下操作:

alter table table1 add constraint fk_table1_team
    foreign key (team_id) REFERENCES table2(team_id);

table1的声明是:

CREATE TABLE table1 (   
    name_id INT NOT NULL,
    team_id INT, 
    PRIMARY KEY(name_id)
);

表之间的引用应该在主键上,如果整数可用,则肯定不在字符列上。

相关问题