📜  PostgreSQL – 唯一索引

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

PostgreSQL – 唯一索引

在 PostgreSQL 中,UNIQUE索引确保一列或多列中值的唯一性。要创建UNIQUE索引,您可以使用以下语法:

Syntax:
CREATE UNIQUE INDEX index_name
ON table_name(column_name, [...]);

注意:只有 B-tree 索引可以声明为唯一索引。

示例 1:

以下语句创建一个名为员工的表:

CREATE TABLE employees (
    employee_id SERIAL PRIMARY KEY,
    first_name VARCHAR(255) NOT NULL,
    last_name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE
);

在该语句中,employee_id 是主键列,email 列具有唯一约束,因此,PostgreSQL 创建了两个 UNIQUE 索引,每个索引一个。



要显示员工表的索引,请使用以下语句:

SELECT 
    tablename, 
    indexname, 
    indexdef 
FROM 
    pg_indexes 
WHERE 
    tablename = 'employees';

输出:

示例 2:

以下语句添加了mobile_phone 员工的专栏 我们在上面的例子中创建的表:

ALTER TABLE employees
ADD mobile_phone VARCHAR(20);

为了确保所有员工的手机号码都是不同的,您可以为 mobile_phone 列定义一个 UNIQUE索引,如下所示:

CREATE UNIQUE INDEX idx_employees_mobile_phone
ON employees(mobile_phone);

现在让我们测试一下。首先,在雇员表中插入一个新行:

INSERT INTO employees(first_name, last_name, email, mobile_phone)
VALUES ('Raju', 'kumar', 'raju.kumar@geeksforgeeks.org', '(408)-555-1234');

其次,尝试插入具有相同电话号码的另一行:

INSERT INTO employees(first_name, last_name, email, mobile_phone)
VALUES ('Nikhil', 'Aggarwal', 'nikhil.aggarwal@gfg.org', '(408)-555-1234');

这应该会引发错误

输出:

正如我们所观察到的,行为正是对唯一索引的预期。