SQL 唯一索引

SQL 唯一索引

SQL唯一索引

唯一索引确保表中索引列的任意两行没有相同的值(不允许重复值)。

可以使用SQL中的CREATE UNIQUE INDEX语句在一张或多张表的一个或多个列上创建唯一索引。

在创建表的唯一索引之前需要注意以下几点:

  • 如果唯一索引仅在单个列上创建,那么该列中的行将是唯一的。
  • 如果一个列在多行中包含NULL,就不能在该列上创建唯一索引。
  • 如果唯一索引在多个列上创建,那么在这些列的组合中的行将是唯一的。
  • 如果列的组合中包含 NULL 超过一行,就不能在多个列上创建唯一索引。

语法

以下是在SQL中创建 唯一索引 的语法:

CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ..., columnN);

在这里,

  • index_name 是您要创建的索引的名称。
  • table_name 是您要在其上创建索引的表的名称。
  • (column1, column2, …, columnN) 是正在创建唯一索引的一个或多个列的名称。

示例

首先,让我们使用以下查询创建名为 CUSTOMERS 的表 –

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR(15) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS VARCHAR(25),
   SALARY DECIMAL(10, 4),
   PRIMARY KEY(ID)
);

将以下查询语句插入一些值到上述创建的表中-

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', '32', 'Ahmedabad', 2000),
(2, 'Khilan', '25', 'Delhi', 1500),
(3, 'kaushik', '23', 'Kota', 2000),
(4, 'Chaitali', '26', 'Mumbai', 6500),
(5, 'Hardik','27', 'Bhopal', 8500),
(6, 'Komal', '22', 'Hyderabad', 9000),
(7, 'Muffy', '24', 'Indore', 5500);

一旦表创建完成,让我们使用以下查询为CUSTOMERS表中名为 SALARY 的列创建一个唯一索引。

CREATE UNIQUE INDEX UNIQUE_ID ON CUSTOMERS (SALARY);

但是,当我们执行上述查询时,输出结果如下:

ERROR 1062 (23000): Duplicate entry '2000.00' for key 'customers.UNIQUE_ID'

由于 SALARY 列存在重复值,无法创建唯一索引,让我们在相同的表上使用下面的查询在 NAME 列上创建 唯一索引

CREATE UNIQUE INDEX UNIQUE_ID ON CUSTOMERS (NAME);

输出

当我们执行上述查询时,输出结果如下:

Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

验证

让我们使用以下查询来验证是否已经创建了列名为NAME的唯一索引。

SHOW INDEX FROM CUSTOMERS;

当你观察下面的输出时,你可以在索引列表中找到包含姓名和ID(主键)的列。

Table Non_unique Key_name Seq_in_index Column_name
customers 0 PRIMARY 1 ID
customers 0 UNIQUE_ID 1 NAME

更新时出现重复值

如果我们尝试使用重复的值更新具有唯一索引的列,数据库引擎会生成一个错误。

示例

假设之前创建了一个名为CUSTOMERS的表,并使用以下查询在名称为ADDRESS的列上创建了一个唯一索引。

CREATE UNIQUE INDEX ADD_UNIQUE_INDEX ON CUSTOMERS(ADDRESS);

现在,让我们使用以下查询将名为ADDRESS的列中的值更新为重复的(已经存在的数据)值-

UPDATE CUSTOMERS SET ADDRESS = 'Mumbai' WHERE ADDRESS = 'Delhi';

输出

在执行上述查询时,输出结果如下所示-

ERROR 1062 (23000): Duplicate entry 'Mumbai' for key 'customers.ADD_UNIQUE_INDEX'

创建多个字段的唯一索引

我们还可以使用CREATE UNIQUE INDEX语句在表的多个字段或列上创建唯一索引。要这样做,您只需要将要在查询中创建索引的列的名称传递给查询。

示例

不需要创建新表,我们来考虑之前创建的CUSTOMERS表。我们将在NAME和AGE两个列上创建唯一索引,使用以下查询:

CREATE UNIQUE INDEX MUL_UNIQUE_INDEX ON CUSTOMERS(NAME, AGE);

输出

当我们执行上述查询时,得到的输出结果如下:

Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0.

验证

现在,让我们使用以下查询列出在CUSTOMERS表上创建的所有索引。

SHOW INDEX FROM CUSTOMERS;

当你观察时,你会发现在索引列表中有列名NAME和AGE,以及ID(主键)。

Table Non_unique Key_name Seq_in_index Column_name
customers 0 PRIMARY 1 ID
customers 0 MUL_UNIQUE_INDEX 1 NAME
customers 0 MUL_UNIQUE_INDEX 2 AGE

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程