【问题标题】:What is the Difference between adding Column as Foreign Key and as a Constraint添加列作为外键和作为约束有什么区别
【发布时间】:2013-05-28 15:50:44
【问题描述】:

我正在使用 Oracle 10g。我正在将新列 deptId 添加到我的 UserList 表中,其中我使用 deptId 列作为引用其他表列 Departments.DepartmentId 的外键

添加外键作为约束和First Query有区别

查询1

ALTER TABLE UserList
ADD FOREIGN KEY (DeptId)
REFERENCES Departments(DepartmentId)    

查询2

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

【问题讨论】:

  • 您的问题暗示您正在添加一列——您实际上只是在此处添加了一个约束,因此您可能需要对其进行编辑。

标签: sql oracle oracle10g


【解决方案1】:

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

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

您的两个示例都超出了约束,但您没有在前一种情况下命名约束,这是一种不好的做法:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢您的回复。所以你说添加外键就像添加未命名约束
    • 是的,语法相同,只是没有约束名称。请参阅documentation
    • 嗯,它不是未命名的,它只是获取系统生成的名称,例如,SYS_C132432
    【解决方案3】:
    ALTER TABLE [dbo].[UserList] WITH NOCHECK ADD CONSTRAINT [fk_DeptId] FOREIGN KEY([DeptId]) 参考 [dbo].[Departments] ([DepartmentId])

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 2016-06-11
      • 1970-01-01
      相关资源
      最近更新 更多