📜  PostgreSQL – 唯一约束(1)

📅  最后修改于: 2023-12-03 15:18:38.699000             🧑  作者: Mango

PostgreSQL – 唯一约束

唯一约束是关系数据库中的一种约束,用于限制表中某些列的值必须是唯一的。在 PostgreSQL 中,可以使用唯一约束来保证表中某个或多个列的值不重复。本文将介绍 PostgreSQL 中唯一约束的使用方法和示例。

创建唯一约束

在 PostgreSQL 中,可以在创建表的时候添加唯一约束,也可以在已有表上添加唯一约束。下面分别介绍这两种方式。

创建表时添加唯一约束

在创建表时,可以使用 UNIQUE 关键字创建唯一约束。例如:

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  username VARCHAR(50) UNIQUE NOT NULL,
  email VARCHAR(50)
);

以上 SQL 语句创建了一个 users 表,该表包含 id, username, email 三个列。其中,username 列添加了唯一约束。

在已有表上添加唯一约束

如果已经存在表,可以使用 ALTER TABLE 语句在表上添加唯一约束。例如:

ALTER TABLE users ADD CONSTRAINT unique_username UNIQUE (username);

以上 SQL 语句在 users 表上添加了一个名为 unique_username 的唯一约束,该约束限制 username 列的值唯一。

使用唯一约束

添加了唯一约束后,就可以保证表中某些列的值不重复了。对于添加了唯一约束的列,在插入或更新数据时,如果有重复的值,将会抛出异常。例如:

INSERT INTO users (username, email) VALUES ('tom', 'tom@example.com');
INSERT INTO users (username, email) VALUES ('tom', 'second@example.com'); -- 抛出异常

当插入 ('tom', 'second@example.com') 时,由于 username 列已经存在 tom 值,因此抛出异常,插入失败。

除了插入数据时,更新数据也会受到唯一约束的限制。例如:

UPDATE users SET username='jerry' WHERE email='jerry@example.com';
UPDATE users SET username='tom' WHERE email='jerry@example.com'; -- 抛出异常

当更新 email 为 jerry@example.com 的记录的 username 值为 tom 时,由于 username 列已经存在 tom 值,因此抛出异常,更新失败。

查询唯一约束

可以使用以下 SQL 语句查询表中的唯一约束:

SELECT conname FROM pg_constraint WHERE contype='u' AND conrelid=(SELECT oid FROM pg_class WHERE relname='users');

该语句用于查询 users 表中的唯一约束名称。

删除唯一约束

使用以下 SQL 语句可以删除一个唯一约束:

ALTER TABLE users DROP CONSTRAINT unique_username;

以上 SQL 语句删除了 users 表中的名为 unique_username 的唯一约束。

总结

本文介绍了 PostgreSQL 中唯一约束的相关知识,并给出了示例。唯一约束是保证表中数据不重复的一种重要手段,在实际开发中应该加以利用。