我已经通过这种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.
有什么问题?我怎么解决这个问题?
答案 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);