首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL声明主键或主键约束

SQL声明主键或主键约束
EN

Stack Overflow用户
提问于 2013-04-17 01:56:01
回答 2查看 5.8K关注 0票数 2

在Oracle SQL中,将字段声明为主键有什么区别

代码语言:javascript
复制
CREATE TABLE my_tab (
my_var NUMBER PRIMARY KEY,
...

并在表定义的末尾添加约束?什么时候应该使用一种而不是另一种?另外,在上面的代码中,在主键之前不需要包含NULL吗?

我环顾四周,似乎找不到任何明确的答案,为什么我应该使用一个而不是另一个。希望有人能澄清这一点。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2013-04-17 02:05:37

就您的示例而言,这没有什么不同:每个示例都会将my_var作为主键。

这就是说,有一些总体上的区别。脑海中浮现两点:

  1. 当您将PRIMARY KEY单独定义为CONSTRAINT时,您可以为约束指定名称,而使用内联my_var ... PRIMARY KEY Oracle将生成名称。
  2. 当您单独定义PRIMARY KEY时,您可以定义由多列组成的PK。

附录:我在帖子中遗漏了这个问题:

另外,在上面的代码中,在主键之前不需要包含NULL吗?

答案是:不需要包括它,但请注意,Oracle将自动创建为NOT NULL的列,因为它不允许pk值为null。下面是一个使用SQLPlus的示例

代码语言:javascript
复制
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

代码语言:javascript
复制
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
票数 7
EN

Stack Overflow用户

发布于 2013-04-17 02:05:16

documentation on constraints确实涵盖了这一点。

第一个方法叫做"inline“。第二个被称为“越界”。

只有一个真正的区别。如果你的主键有多个键,那么你需要使用“行外”语法。否则,他们会做同样的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16043829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档