📜  PostgreSQL – 唯一约束

📅  最后修改于: 2022-05-13 01:57:14.766000             🧑  作者: Mango

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.