SQL 唯一索引
SQL唯一索引
唯一索引确保表中索引列的任意两行没有相同的值(不允许重复值)。
可以使用SQL中的CREATE UNIQUE INDEX语句在一张或多张表的一个或多个列上创建唯一索引。
在创建表的唯一索引之前需要注意以下几点:
- 如果唯一索引仅在单个列上创建,那么该列中的行将是唯一的。
- 如果一个列在多行中包含NULL,就不能在该列上创建唯一索引。
- 如果唯一索引在多个列上创建,那么在这些列的组合中的行将是唯一的。
- 如果列的组合中包含 NULL 超过一行,就不能在多个列上创建唯一索引。
语法
以下是在SQL中创建 唯一索引 的语法:
在这里,
- index_name 是您要创建的索引的名称。
- table_name 是您要在其上创建索引的表的名称。
- (column1, column2, …, columnN) 是正在创建唯一索引的一个或多个列的名称。
示例
首先,让我们使用以下查询创建名为 CUSTOMERS 的表 –
将以下查询语句插入一些值到上述创建的表中-
一旦表创建完成,让我们使用以下查询为CUSTOMERS表中名为 SALARY 的列创建一个唯一索引。
但是,当我们执行上述查询时,输出结果如下:
由于 SALARY 列存在重复值,无法创建唯一索引,让我们在相同的表上使用下面的查询在 NAME 列上创建 唯一索引 。
输出
当我们执行上述查询时,输出结果如下:
验证
让我们使用以下查询来验证是否已经创建了列名为NAME的唯一索引。
当你观察下面的输出时,你可以在索引列表中找到包含姓名和ID(主键)的列。
Table | Non_unique | Key_name | Seq_in_index | Column_name |
---|---|---|---|---|
customers | 0 | PRIMARY | 1 | ID |
customers | 0 | UNIQUE_ID | 1 | NAME |
更新时出现重复值
如果我们尝试使用重复的值更新具有唯一索引的列,数据库引擎会生成一个错误。
示例
假设之前创建了一个名为CUSTOMERS的表,并使用以下查询在名称为ADDRESS的列上创建了一个唯一索引。
现在,让我们使用以下查询将名为ADDRESS的列中的值更新为重复的(已经存在的数据)值-
输出
在执行上述查询时,输出结果如下所示-
创建多个字段的唯一索引
我们还可以使用CREATE UNIQUE INDEX语句在表的多个字段或列上创建唯一索引。要这样做,您只需要将要在查询中创建索引的列的名称传递给查询。
示例
不需要创建新表,我们来考虑之前创建的CUSTOMERS表。我们将在NAME和AGE两个列上创建唯一索引,使用以下查询:
输出
当我们执行上述查询时,得到的输出结果如下:
验证
现在,让我们使用以下查询列出在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 |