2017-02-21 63 views
0

我有以下表格:添加複合外鍵到現有的SQL表

create table x (a int primary); 
create table y (b int primary); 
create table z (c int, d int, e int); 

我(後來目的)添加複合外鍵Z:

alter table z add constraint c foreign key (c) references x(a) 
alter table z add constraint d foreign key (d) references y(b) 

是它可能在單個sql指令中將此複合外鍵添加到現有表中?

+0

。在你的例子 –

+2

這是不是複合約束沒有複合外鍵,這是兩個difderent約束兩個difderent表。所以不,這是不可能的。 –

+0

我能否添加跨越這兩個不同表的單個複合約束? –

回答

0

不能創建這個單組合的約束,因爲它引用了兩個不同的表 - 但它可能是可能的(取決於你的DBMS)在一個SQL指令添加兩個約束條件(雖然我不認爲這是一般建議)。你可以例如找到DB2SQLServer的示例。

所以這可能是可能的:

ALTER TABLE z 
    ADD CONSTRAINT c FOREIGN KEY (c) REFERENCES x(a) 
    ADD CONSTRAINT d FOREIGN KEY (d) REFERENCES y(b) 
+0

該語法取決於Michael使用的DBMS - 我們不知道 –

+0

根據ANSI/ISO SQL標準,每個alter table語句只能添加一個fk。 – jarlh

+0

謝謝你們兩位 - 我相應地編輯了答案。 a_horse_with_no_name:是的,它的基礎上,他提供的語法是猜測 - 我可能是錯的。 jarlh:也可能是真的(我無法檢查),但你有些數據庫似乎仍然允許它,例如也是SQL Server – skymon