2015-11-14 171 views
0
此列清單中沒有任何匹配的唯一或主鍵

我已經通過這個SQL語法創建PERSON表中的Oracle:在甲骨文

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

然後我試圖創建訂單表的語法如下:

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

你是指[oracle]還是[mysql]?雖然Oracle公司擁有MySQL(因爲它購買了Sun),但我們爲實際的Oracle RDBMS保留了[oracle]標籤,這是一種不同的產品。 – APC

+0

經過適當考慮後,發佈的錯誤消息是Oracle的一個ORA-02270,所以我刪除了[mysql]標籤。如果你想爲這兩個數據庫提供答案,請回復。 – APC

+0

http://stackoverflow.com/search?q=[oracle]+No+matching+unique+or+primary+key+for+this+column-list –

回答

1

添加主鍵,把人表:

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

SqlFiddleDemo

1

外鍵實施一到一對多的關係。也就是說,無論從屬表中有多少記錄,它們只能引用父表中的單個記錄。這意味着父表中的引用列必須受PRIMARY或UNIQUE鍵的限制。

錯誤消息告訴你在person(p_id)上沒有這樣的限制。而且!如果我們比較你發佈的兩個DDL語句,我們可以看到你已經爲ORDERS創建了一個主鍵,但是不是爲PERSON創建的。

解決方案很簡單:通過向PERSON添加主鍵來約束P_ID。您可以刪除並重新創建表格,也可以使用alter table語句to add a primary key

0

您應該將主鍵添加到人員表中。 試試這個:

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