在Oracle SQL中,将字段声明为主键有什么区别
CREATE TABLE my_tab (
my_var NUMBER PRIMARY KEY,
...并在表定义的末尾添加约束?什么时候应该使用一种而不是另一种?另外,在上面的代码中,在主键之前不需要包含NULL吗?
我环顾四周,似乎找不到任何明确的答案,为什么我应该使用一个而不是另一个。希望有人能澄清这一点。谢谢!
发布于 2013-04-17 02:05:37
就您的示例而言,这没有什么不同:每个示例都会将my_var作为主键。
这就是说,有一些总体上的区别。脑海中浮现两点:
PRIMARY KEY单独定义为CONSTRAINT时,您可以为约束指定名称,而使用内联my_var ... PRIMARY KEY Oracle将生成名称。PRIMARY KEY时,您可以定义由多列组成的PK。附录:我在帖子中遗漏了这个问题:
另外,在上面的代码中,在主键之前不需要包含NULL吗?
答案是:不需要包括它,但请注意,Oracle将自动创建为NOT NULL的列,因为它不允许pk值为null。下面是一个使用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发布于 2013-04-17 02:05:16
documentation on constraints确实涵盖了这一点。
第一个方法叫做"inline“。第二个被称为“越界”。
只有一个真正的区别。如果你的主键有多个键,那么你需要使用“行外”语法。否则,他们会做同样的事情。
https://stackoverflow.com/questions/16043829
复制相似问题