PostgreSQL – 唯一约束
PostgreSQL 为用户提供了一个 UNIQUE 约束,用于确保存储在一个列或一组列中的值在表中的行中是唯一的。每次用户插入新行时,如果使用 UNIQUE 约束,PostgreSQL 会检查该值是否已存在于表中。如果它发现新值已经存在,则拒绝更改并发出错误。执行类似的过程来更新现有数据。
Syntax: UNIQUE(column); or variable_name Data Type UNIQUE;
现在让我们看一些例子。
示例 1:
在此示例中,我们将使用以下命令email
person
的新表,该表具有 UNIQUE 约束:
CREATE TABLE person (
id serial PRIMARY KEY,
first_name VARCHAR (50),
last_name VARCHAR (50),
email VARCHAR (50) UNIQUE
);
现在我们将使用以下命令向表中插入一些数据:
INSERT INTO person(first_name, last_name, email)
VALUES
(
'Raju',
'Kumar',
'rajukumar@gmail.com'
);
现在,如果我们尝试插入相同的电子邮件,PostgreSQL 应该会引发错误。所以让我们这样做。
INSERT INTO person(first_name, last_name, email)
VALUES
(
'Nikhil',
'Aggarwal',
'rajukumar@gmail.com'
);
输出:
ERROR: duplicate key value violates unique constraint "person_email_key"
DETAIL: Key (email)=(rajukumar@gmail.com) already exists.
示例 2:
PostgreSQL 还允许用户使用以下命令first_name
CREATE TABLE person (
id SERIAL PRIMARY KEY,
first_name VARCHAR (50),
last_name VARCHAR (50),
email VARCHAR (50),
UNIQUE( first_name)
);
现在我们将使用以下命令向表中插入一些数据:
INSERT INTO person(first_name, last_name, email)
VALUES
(
'Raju',
'Kumar',
'rajukumar@gmail.com'
);
现在,如果我们尝试插入相同的电子邮件,PostgreSQL 应该会引发错误。所以让我们这样做。
INSERT INTO person(first_name, last_name, email)
VALUES
(
'Nikhil',
'Aggarwal',
'nikhilagg@gmail.com'
),
(
'Raju',
'Verma',
'rajuverma@gmail.com'
);
由于 Raju Kumar 已经存在,这应该会引发 Raju Verma 的 first_name 错误。
输出:
ERROR: duplicate key value violates unique constraint "person_first_name_key"
DETAIL: Key (first_name)=(Raju) already exists.