在 Oracle SQL 中,将字段声明为 PRIMARY KEY 有什么区别
CREATE TABLE my_tab (
my_var NUMBER PRIMARY KEY,
...
并在表定义的末尾添加一个约束?什么时候应该使用一个而不是另一个?另外,上面的代码中是否需要在 PRIMARY KEY 之前包含 NOT NULL ?
我环顾四周,似乎找不到任何明确的答案来说明为什么我应该使用一个而不是另一个。希望有人可以澄清这一点。谢谢!
在 Oracle SQL 中,将字段声明为 PRIMARY KEY 有什么区别
CREATE TABLE my_tab (
my_var NUMBER PRIMARY KEY,
...
并在表定义的末尾添加一个约束?什么时候应该使用一个而不是另一个?另外,上面的代码中是否需要在 PRIMARY KEY 之前包含 NOT NULL ?
我环顾四周,似乎找不到任何明确的答案来说明为什么我应该使用一个而不是另一个。希望有人可以澄清这一点。谢谢!
就您的示例而言,没有区别:每个都将成my_var
为主键。
也就是说,存在一些普遍的差异。想到的两个:
当您将PRIMARY KEY
单独定义为 aCONSTRAINT
时,您可以为约束分配一个名称,而使用内联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