应用所有知识后,仍然遇到错误02270

时间:2019-07-28 04:57:40

标签: oracle foreign-keys constraints ddl

我正在为任务创建几个表格。

因此,我创建了一个Gardener表和一个Offering表,其中包含所有适当的数据类型和NULL状态,以及每个表的主键约束。在Gardener表中,我包含了offeringID,反之亦然。

当我尝试将外键约束offeringID添加到Gardener表时,出现错误。

在线检查后,我意识到我忘记让彼此的表中的offeringIDgardenerID成为唯一表,因此我更改了表以增加唯一性。

尝试添加外键约束,但出现相同的错误。我认为我可能在理解错误的地方,但是我似乎无法将手指放在上面。

Create Table Gardener
(gardenerID NUMBER(10) NOT NULL,
offeringID NUMBER(10) NOT NULL,
CONSTRAINT gardener_pk PRIMARY KEY(gardenerID)
);

Create Table Offering
(offeringID NUMBER(10) NOT NULL,
gardenerID NUMBER(10) NOT NULL,
CONSTRAINT offering_pk PRIMARY KEY(offeringID)
);

Alter Table Gardener
add CONSTRAINT offering_fk FOREIGN KEY(offeringID)
REFERENCES Offering(offeringID);

Alter Table Gardener
add Unique(offeringID);

Alter Table Offering
add Unique(gardenerID);

这是错误:

ORA-02270: no matching unique or primary key for this column-list
02270. 00000 -  "no matching unique or primary key for this column-list"

Cause: A REFERENCES clause in a CREATE/ALTER TABLE statement gives a column-list 
for which there is no matching unique or primary key constraint in the referenced table.

就像,我还是不明白。 offeringID是否不是主键,因此从Gardener指向它还是不是一个问题?

1 个答案:

答案 0 :(得分:1)

由于您正在尝试为offering.offeringID表中的Gardener列添加外键约束,而当您尝试添加外键时该列没有unique/primary key键。也就是说,操作会在第三个命令处停止。

因此,只需将命令顺序交换为:

Alter Table Gardener 
add Unique(offeringID); -- should be prior to the below command

Alter Table Gardener
add CONSTRAINT offering_fk FOREIGN KEY(offeringID)
REFERENCES Offering(offeringID);

Demo