[英]SQL - 2 Primary Keys in 1 Table
我已經研究了這個問題好幾個星期了,盡管這個站點和其他站點上有很多資源,但我找不到合適的例子來引導我朝着正確的方向前進。 對於一項任務,我試圖在SQL中創建一個包含兩個PK的表。 我現在知道這是不可能的,但是我似乎無法理解為什么,主要是因為這是我所必需的。 我試圖更改代碼並分離鍵,但被告知這是不正確的,並堅持使用兩個PK。 任何幫助或指示將不勝感激。 這是我當前的表格代碼:
SQL> CREATE TABLE solds_ss /* This is creating the SOLDS table from the instance charts */
2 (
3 invoice_no NUMBER(7)
4 CONSTRAINT invoice_no_pk PRIMARY KEY,
5 CONSTRAINT invoice_no_fk
6 FOREIGN KEY (invoice_no)
7 REFERENCES invoices_ss (invoice_no),
8 item_no NUMBER(6)
9 CONSTRAINT item_no_pk PRIMARY KEY,
10 CONSTRAINT item_no_nn NOT NULL,
11 CONSTRAINT item_no_fk
12 FOREIGN KEY (item_no)
13 REFERENCES items_ss (item_no),
14 item_qty_sold NUMBER(3)
15 CONSTRAINT item_qty_sold_nn NOT NULL,
16 item_price NUMBER(6,2)
17 CONSTRAINT item_price_nn NOT NULL,
18 item_tracking_no VARCHAR2(30)
19 CONSTRAINT item_tracking_no_nn NOT NULL
20 );
CONSTRAINT item_no_pk PRIMARY KEY,
*
ERROR at line 9:
ORA-02260: table can have only one primary key
根據我的評論,我懷疑您想要的是一個復合主鍵-兩列共同組成主鍵/唯一標識表中的一行。 這與“具有兩個主鍵”非常不同-每個列的值都可以重復,但是列1和列2的組合必須唯一:
InvoiceNo ItemNo
Inv1 Itm1
Inv1 Itm2
Inv2 Itm1
Inv2 Itm2
如果InvoiceNo是主鍵,或者ItemNo是主鍵,則不允許使用上面的表數據(如果單獨查看,每列包含重復的值),但是如果主鍵組合定義為InvoiceNo和ItemNo,則不允許
因此,我認為您正在尋找的sql更像是:
CREATE TABLE solds_ss /* This is creating the SOLDS table from the instance charts */
(
invoice_no NUMBER(7) NOT NULL,
item_no NUMBER(6) NOT NULL,
item_qty_sold NUMBER(3) NOT NULL,
item_price NUMBER(6,2) NOT NULL,
item_tracking_no VARCHAR2(30) NOT NULL,
CONSTRAINT invoice_no_fk
FOREIGN KEY (invoice_no)
REFERENCES invoices_ss (invoice_no),
CONSTRAINT item_no_fk
FOREIGN KEY (item_no)
REFERENCES items_ss (item_no),
--composite pk
CONSTRAINT solds_ss_pk PRIMARY KEY (invoice_no, item_no)
);
您不能創建兩個主鍵。 主鍵具有三個屬性:
這是防止您擁有其中兩個的第三個屬性。 您可以將一列或一組列聲明為unique
not null
。 但是只有一組這樣的鍵可以是主鍵。
主鍵約束將一列指定為表或視圖的主鍵 。 復合主鍵將列的組合指定為主鍵 。
Oracle不允許在一個表或視圖上使用多個主鍵。 查找主鍵約束 https://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm
主鍵具有三個屬性:
因此,盡管Oracle僅允許您為每個表定義一個主鍵約束,但是您可以通過以下方式輕松地創建具有主鍵的所有屬性的第二,第三或第四列:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.