📅  最后修改于: 2023-12-03 15:18:38.699000             🧑  作者: Mango
唯一约束是关系数据库中的一种约束,用于限制表中某些列的值必须是唯一的。在 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 中唯一约束的相关知识,并给出了示例。唯一约束是保证表中数据不重复的一种重要手段,在实际开发中应该加以利用。