在 table 级别和列级别添加 PRIMARY KEY 约束有什么区别?
What's the difference between adding PRIMARY KEY constraint on table level and on column level?
如问题标题所述,我们可以在列级别添加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)
或table级别:
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
约束(或其他约束)的方法有什么明显的区别吗?
- 这会影响 table 相互引用的方式吗?
谢谢。
完全没有区别。
名称本身 PRIMARY KEY 表明它不是在单个列级别上定义的东西。
你所说的"on column level"其实只是主键在单列时的一种方便的语法。
顺便说一句,主键表示 NOT NULL UNIQUE
,因此您可以跳过将它们定义为 UNIQUE
。
主键和唯一键都是实体完整性约束,在很多方面都是相似的。但是,在编程方面,他们有很多不同之处。两者都是主要用于数据库管理系统的基本概念。
主键是数据库table的一个或多个columns/fields的集合,它唯一标识table中的一条记录。另一方面,唯一键防止两个记录在列中具有相同的值。
从概念上讲,给定的 table 只能有一个 PRIMARY KEY,而 table.
可以有多个 UNIQUE KEY
主键必须是唯一的,但唯一键不一定是主键。
主键不能在 table 中接受 NULL 值,而唯一键可以允许 NULL 值,但 table 中只有一个 NULL 除外。
您可以参考文章:http://covelign.com/3Y8P
如问题标题所述,我们可以在列级别添加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)
或table级别:
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
约束(或其他约束)的方法有什么明显的区别吗? - 这会影响 table 相互引用的方式吗?
谢谢。
完全没有区别。
名称本身 PRIMARY KEY 表明它不是在单个列级别上定义的东西。
你所说的"on column level"其实只是主键在单列时的一种方便的语法。
顺便说一句,主键表示 NOT NULL UNIQUE
,因此您可以跳过将它们定义为 UNIQUE
。
主键和唯一键都是实体完整性约束,在很多方面都是相似的。但是,在编程方面,他们有很多不同之处。两者都是主要用于数据库管理系统的基本概念。
主键是数据库table的一个或多个columns/fields的集合,它唯一标识table中的一条记录。另一方面,唯一键防止两个记录在列中具有相同的值。
从概念上讲,给定的 table 只能有一个 PRIMARY KEY,而 table.
可以有多个 UNIQUE KEY主键必须是唯一的,但唯一键不一定是主键。
主键不能在 table 中接受 NULL 值,而唯一键可以允许 NULL 值,但 table 中只有一个 NULL 除外。
您可以参考文章:http://covelign.com/3Y8P