ZetCode

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_idproduct_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 列包含唯一值。

使用唯一约束的最佳实践

来源

PostgreSQL 文档

在本文中,我们通过实际示例和最佳实践探讨了如何使用 PostgreSQL UNIQUE 约束。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。