Oracle

时间:2015-11-14 08:48:34

标签: sql oracle foreign-keys

我已经通过这种SQL语法在Oracle中创建了PERSON表:

 Create table person
 (
 p_id int not null,
 personName char(5) not null );

然后我尝试使用以下语法创建ORDERS表:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES person(p_id) );

但是我收到以下错误。

No matching unique or primary key for this column-list.

有什么问题?我怎么解决这个问题?

3 个答案:

答案 0 :(得分:1)

将主键添加到人员表:

 CREATE TABLE person(
   p_id int not null,
   personName char(5) not null,
   PRIMARY KEY (p_ID)
 );

SqlFiddleDemo

答案 1 :(得分:1)

外键强制执行一对多关系。也就是说,在依赖表中有许多记录,它们只能引用父表中的单个记录。这意味着父表中引用的列必须由PRIMARY或UNIQUE键约束。

错误消息告诉您person(p_id)上没有此类限制。瞧!如果我们比较你发布的两个DDL语句,我们可以看到你为ORDERS创建了一个主键,但没有为PERSON创建。

解决方案很简单:通过向PERSON添加主键来约束P_ID。您可以删除并重新创建表格,也可以使用alter table语句to add a primary key

答案 2 :(得分:0)

您应该将主键添加到人员表。 试试这个:

ALTER TABLE Person ADD CONSTRAINT p_id PRIMARY KEY(p_id);