第3节-使用表格数据-主键
摘要: 在本教程中,你将了解主键以及如何使用 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 INTObrands (name)
VALUES('Apple')
RETURNING *;
该语句向 brands
表中插入一行数据,其 id
为 1
。
brand_id | name
----------+-------1 | Apple
如果插入新行,其 ID
将为 2
:
INSERT INTObrands (name)
VALUES('Samsung')
RETURNING *;
输出:
brand_id | name
----------+---------1 | Apple2 | 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
来定义自增主键。