添加列作为外键和作为约束有什么区别

时间:2013-05-28 06:51:08

标签: sql oracle oracle10g

我正在使用Oracle 10g。我正在将新列deptId添加到我的UserList表中,其中我使用deptId列作为外键引用其他表Column 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)

3 个答案:

答案 0 :(得分:4)

第二种语法允许您命名约束。第一个没有。

答案 1 :(得分:4)

除了使用可选的“CONSTRAINT”和约束名称子句外,没有区别。

有两种约束定义:内联和外联。前者作为列定义的一部分在列上运行,因此不需要命名DeptID列。后者是表定义的一部分,因此确实如此。

你的两个例子都是不符合约束的,但你没有在前一种情况下命名约束,这是一种不好的做法:

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

答案 2 :(得分:-2)


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

不,两个查询都没有区别。但是您可以命名外键约束名称。您可以使用上述查询。