答案是:它不需要包括在内,但请注意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
2 回答
documentation on约束确实涵盖了这一点 .
第一种方法称为“内联” . 第二个被称为“脱节” .
只有一个真正的区别 . 如果您的主键有多个键,则需要使用“out of line”语法 . 否则,他们会做同样的事情 .
就你的例子而言,没有区别:每个都会使
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
的示例:即使您指定
NULL
,Oracle也会自动将其更改为NOT NULL
: