摘要: 在本教程中,你将了解主键以及如何使用 PostgreSQL 主键约束为表创建主键。
定义主键
主键是一个列或一组列,用于唯一标识表中的每一行。它确保主键列中的每一行都有一个不同的值。
例如, brand_id 列是下面 brands 表的主键:
| brand_id | name |
|---|---|
| 1 | Apple |
| 2 | Samsung |
| 3 |
在这个 brands 表中,brand_id 为 1 的品牌名称是 Apple ,2 代表 Samsung ,31 表示 Google 。brand_id 列中没有重复的数字。
在 PostgreSQL 中,您可以使用 PRIMARY KEY 约束为表定义主键。
如果主键是单个列,您可以通过在主键列后添加 PRIMARY KEY 关键字,将 PRIMARY KEY 约束定义为列约束:
CREATE TABLE table_name(
column1 data_type PRIMARY KEY,
column2 data_type,
column3 data_type,
...
);
在这种语法中,column1 是表的主键列。
当主键列包含两列或更多列时,您可以将主键定义为表约束:
CREATE TABLE table_name(
column1 data_type,
column2 data_type,
column3 data_type,
...
PRIMARY KEY (column1, column2)
);
在这种语法中,主键包含 column1 和 column2 。换句话说,没有两行在 column1 和 column2 中具有相同的值。当主键由两个或更多列组成时,它被称为复合主键。
为表添加主键
如果您有一个没有主键的表,可以使用以下 ALTER TABLE 语句添加一个主键:
ALTER TABLE table_name
ADD PRIMARY KEY (column1, column2, ...);
自增主键
自增列是主键的常用选择,因其简单高效。它会为插入表中的每一行新记录自动生成一个唯一编号,无需手动输入,同时确保数据的唯一性。
要在 PostgreSQL 中定义自增列,需使用 GENERATED ALWAYS AS IDENTITY 属性,如下所示:
id INT GENERATED ALWAYS AS IDENTITY
请注意,由于权限和完整性缺失问题,不建议使用
SERIAL。
创建 PostgreSQL 主键示例
让我们来看一些定义主键的示例。
为表定义主键列
按照以下示例以创建一个名为 brands 的表,其中 brand_id 作为主键列:
CREATE TABLE brands (
brand_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(50)
);
由于 brand_id 列是自动递增的,因此您无需为该列提供值。
以下语句将向 brands 表中插入一行新数据:
INSERT INTO
brands (name)
VALUES
('Apple')
RETURNING *;
该语句向 brands 表中插入一行数据,其 id 为 1。
brand_id | name
----------+-------
1 | Apple
如果插入新行,其 ID 将为 2 :
INSERT INTO
brands (name)
VALUES
('Samsung')
RETURNING *;
输出:
brand_id | name
----------+---------
1 | Apple
2 | Samsung
创建复合主键示例
主键可以由两个或多个列组成。例如,以下 CREATE TABLE 语句创建了一个新表 product_tags ,其主键包含 product_id 和 tag_id 列:
CREATE TABLE product_tags (
product_id INT,
tag_id INT,
PRIMARY KEY (product_id, tag_id)
);
总结
- 主键是一个列或一组列,用于唯一标识表中的一行。
- 使用
PostgreSQL的PRIMARY KEY约束为表定义主键。 - 使用
GENERATED ALWAYS AS IDENTITY PRIMARY KEY来定义自增主键。




