首页 文章

SQL声明主键或主键约束

提问于
浏览
2

在Oracle SQL中,将字段声明为PRIMARY KEY之间的区别是什么

CREATE TABLE my_tab (
my_var NUMBER PRIMARY KEY,
...

并在表定义的末尾添加一个CONSTRAINT?应该何时使用另一个?另外,在PRIMARY KEY之前,NOT NULL是否需要包含在上面的代码中?

我环顾四周,似乎无法找到任何明确的答案,为什么我应该使用一个而不是另一个 . 希望有人可以清除它 . 谢谢!

2 回答

  • 2

    documentation on约束确实涵盖了这一点 .

    第一种方法称为“内联” . 第二个被称为“脱节” .

    只有一个真正的区别 . 如果您的主键有多个键,则需要使用“out of line”语法 . 否则,他们会做同样的事情 .

  • 7

    就你的例子而言,没有区别:每个都会使 my_var 成为主键 .

    也就是说,存在一些普遍的差异 . 想到两个:

    • 当您将 PRIMARY KEY 单独定义为 CONSTRAINT 时,可以为约束指定名称,而使用内联 my_var ... PRIMARY KEY Oracle将生成名称 .

    • 当您单独定义 PRIMARY KEY 时,您可以定义由多个列组成的PK .


    Addendum :我在帖子中错过了这个问题:

    另外,在PRIMARY KEY之前,NOT NULL是否需要包含在上面的代码中?

    答案是:它不需要包括在内,但请注意Oracle将自动创建列为 NOT NULL ,因为它没有't allow nulls in PK values. Here'使用 SQLPlus 的示例:

    SQL> CREATE TABLE c (col1 NUMBER PRIMARY KEY, col2 NUMBER);
    Table created.
    
    SQL> DESC c
    
    Name  Null?    Type
    ----- -------- ------
    COL1  NOT NULL NUMBER <-- Oracle automatically made this NOT NULL
    COL2           NUMBER
    

    即使您指定 NULL ,Oracle也会自动将其更改为 NOT NULL

    SQL> CREATE TABLE d (col1 NUMBER NULL PRIMARY KEY, col2 NUMBER);
    Table created.
    
    SQL> desc d;
     Name  Null?    Type
     ----- -------- ------
     COL1  NOT NULL NUMBER <-- Oracle automatically made it NOT NULL again
     COL2           NUMBER
    

相关问题