外键 - SQL开发人员

时间:2016-03-30 21:11:08

标签: sql foreign-keys

因此我遇到的问题是我的表中的外键,当我在没有外键的情况下运行时会创建表。错误即时消息将发布在底部,只是想熟悉SQL。

CREATE TABLE Player
(
Player_ID VARCHAR(20) NOT NULL,
Fname VARCHAR(15),
Sname VARCHAR(15),
DOB    NUMBER(3),
Height NUMBER(3),
Weight NUMBER(3),
Position VARCHAR(15),
Team_ID VARCHAR(20) NOT NULL,

CONSTRAINT Player_primary_key PRIMARY KEY (Player_ID),
CONSTRAINT Player_foreign_key FOREIGN KEY(Team_ID) REFERENCES TEAM(Team_ID)
);


CREATE TABLE Team
(
Team_ID VARCHAR(20) NOT NULL,
Tname VARCHAR(20),
Tlocation VARCHAR(20),
Coach VARCHAR(20),
Gameswon NUMBER(10),
Gameslost NUMBER (10),

CONSTRAINT Team_primary_key PRIMARY KEY (Team_ID)
);


CREATE TABLE Match
(
Match_ID VARCHAR(20) NOT NULL,
Hometeam VARCHAR(20), 
Awayteam VARCHAR(20), 
Score NUMBER (10),
Mdate NUMBER(10),
Mtime NUMBER(10),

CONSTRAINT Match_primary_key PRIMARY KEY (Match_ID),
CONSTRAINT Match_foreign_keyHome FOREIGN KEY (Team_ID) REFERENCES HOST(Team_ID),
CONSTRAINT Match_foreign_keyAway FOREIGN KEY (Team_ID) REFERENCES TEAM(Team_ID)
);

CREATE TABLE HOST
(
Team_ID VARCHAR(20) NOT NULL,
Match_ID VARCHAR(20) NOT NULL,

CONSTRAINT Host_Foriegn_Key_Team FOREIGN KEY (Team_ID) REFERENCES TEAM(Team_ID),
CONSTRAINT Host_Foriegn_Key_Match FOREIGN KEY (Match_ID) REFERENCES MATCH(Match_ID)
);

1 个答案:

答案 0 :(得分:1)

您的第一个错误似乎与您尚未定义Team表的事实有关。由于您使用:

CONSTRAINT Player_foreign_key FOREIGN KEY(Team_ID) REFERENCES TEAM(Team_ID)

对于Match表,您正在使用Team_ID创建外键,即使表中不存在。这就是为什么它会抛出错误:

CONSTRAINT Match_foreign_keyAway FOREIGN KEY (Team_ID) REFERENCES TEAM(Team_ID)

对于您的上一个错误,MATCH实际上是一个SQL命令,这就是为什么当您将其作为代码示例时它变为蓝色的原因。我认为这就是为什么它正在寻找一个表名,但假设你没有提供表名。这只是我对最后一次错误的猜测。

1)所以我首先创建你的Team表而不是先创建Player。
2)然后我可能会将Match_foreign_keyHome的Team_ID更改为Hometeam:

CONSTRAINT Match_foreign_keyHome FOREIGN KEY (Hometeam) REFERENCES HOST(Team_ID),

然后我会将Match_foreign_keyAway的Team_ID更改为Awayteam:

CONSTRAINT Match_foreign_keyHome FOREIGN KEY (Awayteam) REFERENCES HOST(Team_ID),