如问题标题所述,我们可以在列级别添加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
约束(或其他约束)的方法之间是否有明显区别? 谢谢。
答案 0 :(得分:2)
完全没有区别。
名称本身 PRIMARY KEY表示它不是在单个列级别上定义的。
实际上,所谓的“在列级别”不过是主键位于单个列中时的一种方便语法。
顺便说一句,主键的意思是NOT NULL UNIQUE
,因此您可以跳过将它们定义为UNIQUE
。
答案 1 :(得分:2)
主键和唯一键都是实体完整性约束,在很多方面都相似。但是,在编程方面,他们有很大的不同。两者都是基本概念,主要用于数据库管理系统。
主键是一组唯一地标识表中记录的数据库表的一个或多个列/字段。另一方面,Unique键可防止两个记录在列中具有相同的值。
从概念上讲,一个给定的表只能有一个PRIMARY KEY,而一个表则可以有多个UNIQUE KEY。
主键必须是唯一的,但唯一键不必一定是主键。
主键不能接受表中的NULL值,而唯一键可以允许NULL值,但表中只能有一个NULL。
您可以参考以下文章:http://covelign.com/3Y8P