第一个表中的外键

时间:2018-02-17 12:47:54

标签: sql postgresql

我对外键有疑问。

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

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)
);

如果我尝试上面的代码,我会收到以下错误:

  

错误:关系“”不存在

提前致谢。

2 个答案:

答案 0 :(得分:1)

首先创建第二个表。或者使用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)
);

如果有一个整数,那么表之间的引用应该在主键上,当然不应该在字符列上。

答案 1 :(得分:1)

这里是使用外键创建表的语法:

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和team_id是INT,但不是。{/ p>