PostgreSQL 主键教程
主键(PRIMARY KEY)唯一标识表中的每一行:不允许 NULL、不允许重复。一张表只能有一个主键,但可以由多列复合组成。
本篇内容
- 单列主键与复合主键
- 主键与自增列 / UUID 的配合
- 添加与删除主键
- 主键的索引与性能含义
定义主键
-- 列级定义
CREATE TABLE users (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(50) NOT NULL
);
-- 表级定义(复合主键:多列联合唯一)
CREATE TABLE order_items (
order_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
quantity INTEGER NOT NULL,
PRIMARY KEY (order_id, product_id)
);
修改主键
-- 添加主键(约束可命名,方便后续删除)
ALTER TABLE users ADD CONSTRAINT users_pkey PRIMARY KEY (id);
-- 删除主键
ALTER TABLE users DROP CONSTRAINT users_pkey;
待补充(TODO)
- 补充:主键 vs 唯一约束的区别(NULL 允许性、数量限制)
- 补充:自然键 vs 代理键的选型(业务字段做主键的风险)
- 补充:主键对聚集存储、索引和 JOIN 性能的影响
- 补充:分布式/分库分表场景下的主键策略(UUID v7、雪花 ID)