PostgreSQL 唯一约束
最后修改于 2025 年 2 月 25 日
UNIQUE 约束确保列中的所有值都是唯一的。本教程将通过实际示例介绍如何使用 UNIQUE 约束。
设置数据库
首先,让我们创建 users 表,并在 email 列上添加 UNIQUE 约束。
create_table.sql
CREATE TABLE users (
user_id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
UNIQUE 约束确保没有两个用户可以拥有相同的电子邮件地址。
基本唯一约束
此示例演示了向 users 表插入唯一电子邮件。
unique_basic.sql
INSERT INTO users (username, email) VALUES
('john_doe', 'john@example.com'),
('jane_doe', 'jane@example.com');
尝试插入重复的电子邮件将导致错误。
多列唯一约束
此示例在多列上创建 UNIQUE 约束。
unique_multiple_columns.sql
CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
user_id INT NOT NULL,
product_id INT NOT NULL,
UNIQUE (user_id, product_id)
);
user_id 和 product_id 的组合必须是唯一的。
向现有表添加唯一约束
此示例将 UNIQUE 约束添加到现有表中。
unique_add_to_existing.sql
ALTER TABLE users ADD CONSTRAINT unique_username UNIQUE (username);
现在 username 列必须包含唯一值。
删除唯一约束
此示例从表中删除 UNIQUE 约束。
unique_drop.sql
ALTER TABLE users DROP CONSTRAINT unique_username;
users 表已移除 unique_username 约束。
带 NULL 值的唯一约束
此示例显示了 UNIQUE 约束如何处理 NULL 值。
unique_with_null.sql
INSERT INTO users (username, email) VALUES
('alice', NULL),
('bob', NULL);
在具有 UNIQUE 约束的列中允许多个 NULL 值。
带索引的唯一约束
此示例在列上创建唯一索引。
unique_index.sql
CREATE UNIQUE INDEX idx_unique_email ON users (email);
idx_unique_email 索引确保 email 列包含唯一值。
使用唯一约束的最佳实践
- 用于关键数据:将
UNIQUE约束应用于必须包含唯一值的列。 - 与 NOT NULL 结合使用:使用
NOT NULL确保带有UNIQUE约束的列始终已填充。 - 索引性能:唯一约束会自动创建索引,从而提高查询性能。
- 规划可扩展性:考虑唯一约束对大型数据集和索引策略的影响。
来源
在本文中,我们通过实际示例和最佳实践探讨了如何使用 PostgreSQL UNIQUE 约束。