SQL声明主键或主键约束

Boo*_*oon 2 sql oracle constraints primary-key

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

CREATE TABLE my_tab (
my_var NUMBER PRIMARY KEY,
...
Run Code Online (Sandbox Code Playgroud)

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

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

Ed *_*bbs 7

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

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

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

  2. 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
Run Code Online (Sandbox Code Playgroud)

即使您指定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
Run Code Online (Sandbox Code Playgroud)