在表级别和列级别添加PRIMARY KEY约束之间有什么区别?

时间:2019-03-13 03:46:21

标签: sql postgresql ddl

如问题标题所述,我们可以在列级别添加PRIMARY KEY约束:

animals=# CREATE TABLE temp (
id serial UNIQUE PRIMARY KEY);
CREATE TABLE
animals=# \d temp
                            Table "public.temp"
 Column |  Type   | Collation | Nullable |             Default
--------+---------+-----------+----------+----------------------------------
 id     | integer |           | not null | nextval('temp_id_seq'::regclass)
Indexes:
    "temp_pkey" PRIMARY KEY, btree (id)

或在表级:

animals=# CREATE TABLE temp_1 (
id serial UNIQUE,
PRIMARY KEY (id));
CREATE TABLE
animals=# \d temp_1
                            Table "public.temp_1"
 Column |  Type   | Collation | Nullable |              Default
--------+---------+-----------+----------+------------------------------------
 id     | integer |           | not null | nextval('temp_1_id_seq'::regclass)
Indexes:
    "temp_1_pkey" PRIMARY KEY, btree (id)

  • 这两种添加PRIMARY KEY约束(或其他约束)的方法之间是否有明显区别?
  • 这会影响表之间如何相互引用吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

完全没有区别。
名称本身 PRIMARY KEY表示它不是在单个列级别上定义的。

实际上,所谓的“在列级别”不过是主键位于单个列中时的一种方便语法。

顺便说一句,主键的意思是NOT NULL UNIQUE,因此您可以跳过将它们定义为UNIQUE

答案 1 :(得分:2)

  • 主键和唯一键都是实体完整性约束,在很多方面都相似。但是,在编程方面,他们有很大的不同。两者都是基本概念,主要用于数据库管理系统。

  • 主键是一组唯一地标识表中记录的数据库表的一个或多个列/字段。另一方面,Unique键可防止两个记录在列中具有相同的值。

  • 从概念上讲,一个给定的表只能有一个PRIMARY KEY,而一个表则可以有多个UNIQUE KEY。

  • 主键必须是唯一的,但唯一键不必一定是主键。

  • 主键不能接受表中的NULL值,而唯一键可以允许NULL值,但表中只能有一个NULL。

您可以参考以下文章:http://covelign.com/3Y8P