九月 13, 2023
摘要:在本教程中,我们将向您展示主键是什么以及如何通过 SQL 语句管理 PostgreSQL 主键约束。
主键是用于唯一标识表中的行的一列或一组列。
您可以通过主键约束来定义主键。从技术上讲,主键约束是非空约束和 UNIQUE 约束的组合。
一张表只能有一个主键。向每个表添加主键是一个很好的做法。当您向表添加主键时,PostgreSQL 会在用于定义主键的列或一组列上创建唯一的 B 树索引。
创建表时定义主键
通常,当我们使用 CREATE TABLE 语句定义表的结构时,我们会向表添加主键。
CREATE TABLE TABLE (
column_1 data_type PRIMARY KEY,
column_2 data_type,
…
);
以下语句创建一个名为po_headers
的采购订单 (PO) 标头表。
CREATE TABLE po_headers (
po_no INTEGER PRIMARY KEY,
vendor_no INTEGER,
description TEXT,
shipping_address TEXT
);
po_no
是po_headers
表的主键,唯一标识po_headers
表中的采购订单。
如果主键由两列或更多列组成,则可以按如下方式定义主键约束:
CREATE TABLE TABLE (
column_1 data_type,
column_2 data_type,
…
PRIMARY KEY (column_1, column_2)
);
例如,以下语句创建采购订单行项目表,其主键是采购订单编号 (po_no
) 和行项目编号 (item_no
) 的组合。
CREATE TABLE po_items (
po_no INTEGER,
item_no INTEGER,
product_no INTEGER,
qty INTEGER,
net_price NUMERIC,
PRIMARY KEY (po_no, item_no)
);
如果您没有显式指定主键约束的名称,PostgreSQL 将为主键约束分配一个默认名称。默认情况下,PostgreSQL 使用table-name_pkey
作为主键约束的默认名称。在此示例中,PostgreSQL 使用名称po_items_pkey
为po_items
表创建主键约束。
如果您想指定主键约束的名称,请使用CONSTRAINT
子句,如下:
CONSTRAINT constraint_name PRIMARY KEY(column_1, column_2,...);
更改现有表结构时定义主键
通常很少为现有表定义主键。如果必须这样做,可以使用 ALTER TABLE 语句添加主键约束。
ALTER TABLE table_name ADD PRIMARY KEY (column_1, column_2);
以下语句创建一个名为products
的表,但未定义任何主键。
CREATE TABLE products (
product_no INTEGER,
description TEXT,
product_cost NUMERIC
);
假设要给products
表添加主键约束,可以执行以下语句:
ALTER TABLE products
ADD PRIMARY KEY (product_no);
如何给现有表添加自增主键
假设,我们有一个没有任何主键的vendors
表。
CREATE TABLE vendors (name VARCHAR(255));
我们使用 INSERT 语句向vendors
表中添加几行:
INSERT INTO vendors (NAME)
VALUES
('Microsoft'),
('IBM'),
('Apple'),
('Samsung');
为了验证插入操作,我们使用以下 SELECT 语句从vendors
表中查询数据:
SELECT * FROM vendors;
现在,如果我们想在vendors
表中添加一个名为id
的主键,并且id
字段自动递增 1,我们使用以下语句:
ALTER TABLE vendors ADD COLUMN ID SERIAL PRIMARY KEY;
我们再检查一下vendors
表。
SELECT id, name FROM vendors;
删除主键
要删除现有的主键约束,您还可以使用具有以下语法的ALTER TABLE
语句:
ALTER TABLE table_name DROP CONSTRAINT primary_key_constraint;
例如,要删除products
表的主键约束,可以使用以下语句:
ALTER TABLE products
DROP CONSTRAINT products_pkey;
在本教程中,您学习了如何使用CREATE TABLE
和ALTER TABLE
语句添加和删除主键约束。