在Oracle SQL中,将字段声明为PRIMARY KEY与
之间的区别是什么CREATE TABLE my_tab (
my_var NUMBER PRIMARY KEY,
...
并在表定义的末尾添加CONSTRAINT?应该何时使用另一个?另外,在PRIMARY KEY之前,上面的代码中是否需要包含NOT NULL?
我环顾四周,似乎无法找到任何明确的答案,为什么我应该使用一个而不是另一个。希望有人可以清除它。谢谢!
答案 0 :(得分:7)
就您的示例而言,没有区别:每个都会使my_var
成为主键。
也就是说,存在一些普遍的差异。想到两个:
当您将PRIMARY KEY
单独定义为CONSTRAINT
时,您可以为约束指定名称,而使用内联my_var ... PRIMARY KEY
Oracle将生成名称。
当您单独定义PRIMARY KEY
时,您可以定义由多个列组成的PK。
附录:我在帖子中错过了这个问题:
此外,在PRIMARY KEY之前是否需要在上面的代码中包含NOT NULL?
答案是:它不需要包括在内,但请注意Oracle会自动将列创建为NOT NULL
,因为它不允许PK值中的空值。以下是使用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
答案 1 :(得分:2)
约束上的documentation确实涵盖了这一点。
第一种方法称为“内联”。第二个被称为“脱节”。
只有一个真正的区别。如果您的主键有多个键,则需要使用“out of line”语法。否则,他们会做同样的事情。