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

问题描述 投票:0回答:2

正如描述的问题标题,我们可以在列级添加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约束(或其他约束)这两种方法之间是否有明显的区别?
  • 这会影响表格如何相互引用吗?

谢谢。

sql postgresql ddl
2个回答
2
投票

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

您在“列级别”上调用的实际上只不过是主键在单个列中时的便捷语法。

顺便说一句,主键意味着NOT NULL UNIQUE,所以你可以跳过将它们定义为UNIQUE


2
投票
  • 主键和唯一键都是在许多方面类似的实体完整性约束。但是,在编程方面,他们有很大的差异。两者都是主要用于数据库管理系统的基本概念。
  • 主键是数据库表的一个或多个列/字段的集合,用于唯一标识表中的记录。另一方面,唯一键可防止两个记录在列中具有相同的值。
  • 从概念上讲,给定表只能有一个PRIMARY KEY,而表可以有多个UNIQUE KEY。
  • 主键必须是唯一的,但唯一键不一定必须是主键。
  • 主键不能接受表中的NULL值,而唯一键可以允许NULL值,表中只有一个NULL。

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

© www.soinside.com 2019 - 2024. All rights reserved.