2013-05-28 32 views
3

我使用的是Oracle 10g。我加入新列DEPTID我UserList的表,我用DEPTID列作爲外鍵它引用其他表中的列Departments.DepartmentId添加列作爲外鍵和作爲約束之間的區別是什麼

是否有增加外鍵爲約束和第一個查詢

查詢1

之間的區別
ALTER TABLE UserList 
ADD FOREIGN KEY (DeptId) 
REFERENCES Departments(DepartmentId)  

QUERY2

ALTER TABLE UserList 
ADD CONSTRAINT fk_DeptId FOREIGN KEY (DeptId) 
REFERENCES Departments(DepartmentId) 
+0

你的問題意味着你正在添加一列 - 你實際上只是在這裏添加一個約束,所以你可能想編輯它。 –

回答

4

除了使用可選的「CONSTRAINT」和約束名稱子句之外,沒有區別。

有兩種約束定義:inline和out of line。前者作爲列定義的一部分在列上操作,因此不需要命名DeptID列。後者是表定義的一部分,因此。

你的例子兩者都是脫節的限制,但是你有沒有命名在前一種情況下的約束,這是一個不好的做法:

http://docs.oracle.com/cd/E18283_01/server.112/e17118/clauses002.htm#g1053592

4

第二種語法允許您命名約束。第一個沒有。

+0

感謝您的回覆。所以你要說的是添加外鍵就像添加Unnamed Constraint –

+0

是的,它是相同的語法,只是沒有限制名稱。請參閱[文檔](http://docs.oracle.com/cd/B28359_01/server.111/b28286/clauses002.htm#CJAEDFIB)。 –

+0

嗯,它不是未命名的,它只是獲取系統生成的名稱,如SYS_C132432 –

-2
 

ALTER TABLE [dbo].[UserList] WITH NOCHECK ADD CONSTRAINT [fk_DeptId] FOREIGN KEY([DeptId]) 
REFERENCES [dbo].[Departments] ([DepartmentId]) 

沒有,沒有任何區別在你的兩個查詢中。但是你要命名外鍵約束名稱。您可以使用上述查詢。

相關問題