添加外键约束时遇到问题(错误 ORA-02270:此列列表没有匹配的唯一键或主键)
Posted
技术标签:
【中文标题】添加外键约束时遇到问题(错误 ORA-02270:此列列表没有匹配的唯一键或主键)【英文标题】:Trouble adding Foreign Key Constraint (error ORA-02270: no matching unique or primary key for this column-list) 【发布时间】:2020-04-17 18:55:37 【问题描述】:我正在学习如何为具有主键和外键限制的班级创建一个小而简单的数据库。我在尝试运行我的 ALTER TABLE 语句时收到 ORA-02770,据我了解,这是通知我在外部表中引用的列未列为主键约束。但是,据我所知,我的语法在 CREATE TABLES 语句中命名主键是正确的。我在 all_cons_columns 表中搜索了 player_info 表,它也显示了列出的主键。我能得到一些指导吗?下面列出的是我当前的脚本:
CREATE TABLE Player_Game
( school varchar2(30),
player_number number(2,0),
game_number number(1,0),
CONSTRAINT playergame_pk PRIMARY KEY (school, player_number,game_number)
);
CREATE TABLE School
( school varchar2(30),
city varchar2(30),
coach varchar2(30),
team_name varchar2(30),
win_record number (2,0),
loss_record number (2,0),
CONSTRAINT school_pk PRIMARY KEY (school)
);
CREATE TABLE Game
( school varchar2(30),
game_number number(1,0),
game_date DATE,
game_score varchar2(15),
CONSTRAINT game_pk PRIMARY KEY (school, game_number)
);
CREATE TABLE player_info
( school varchar2(30),
player_number number(2,0),
player_name varchar2(25),
CONSTRAINT playerinfo_pk PRIMARY KEY (school, player_number)
);
CREATE TABLE city
( city varchar2(30),
population number(5,0),
CONSTRAINT city_pk PRIMARY KEY (city)
);
/*Here is the failing alter command */
ALTER TABLE Player_Game
ADD CONSTRAINT playergame_fk FOREIGN KEY (school) REFERENCES game(school);
【问题讨论】:
正如错误提示的那样,您的playergame_fk
列列表与game
表上的任何主键或唯一键都不匹配。具体来说,您的主键定义为school
和game_number
的组合。外键必须与列列表完全匹配才能起作用。
很好的解释,谢谢克里斯。我也来自犹他州北部!
【参考方案1】:
您在 alter table 语句中的 playergame_fk
中有不正确的列列表。 外键的列列表必须与它所引用的主键的列列表完全匹配。
主键列列表为school, game_number
,因此,您的外键必须具有相同的列:
ALTER TABLE Player_Game
ADD CONSTRAINT playergame_fk FOREIGN KEY (school, game_number)
REFERENCES game(school, game_number);
【讨论】:
太好了,谢谢拉利特!这对我来说非常有效,而且也很有意义。 @stasis100t 不客气!请将其标记为已回答,也会对其他人有所帮助。以上是关于添加外键约束时遇到问题(错误 ORA-02270:此列列表没有匹配的唯一键或主键)的主要内容,如果未能解决你的问题,请参考以下文章
Oracle (ORA-02270) : 此列列表错误没有匹配的唯一键或主键
如何修复 sql 中的“ORA-02270:此列列表没有匹配的唯一键或主键”错误