目录

  1. UNIQUE 约束简介
  2. UNIQUE 约束的语法
  3. UNIQUE 约束的使用场景
  4. UNIQUE 约束的注意事项
  5. 参考资料

UNIQUE 约束简介

UNIQUE 约束用于确保表中某一列或某些列的所有值都是唯一的。与主键约束类似,UNIQUE 约束也要求列中的数据不允许重复,但与主键约束不同,UNIQUE 约束允许列中包含 NULL 值(一个列中可以有多个 NULL 值)。此外,一个表可以包含多个 UNIQUE 约束,而只能有一个主键约束。

UNIQUE 约束通常用于那些需要唯一标识的列,例如用户名、邮箱等,确保每个数据项都不重复。


UNIQUE 约束的语法

1. 在创建表时定义 UNIQUE 约束

在创建表时,可以通过 UNIQUE 约束来确保某列或多列的值唯一:

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE
);

在这个例子中,email 列具有 UNIQUE 约束,确保每个员工的电子邮件地址都是唯一的。

2. 在已存在的表中添加 UNIQUE 约束

如果表已经存在,并且希望为某一列或列组合添加 UNIQUE 约束,可以使用 ALTER TABLE 语句:

ALTER TABLE employees
ADD CONSTRAINT unique_email UNIQUE (email);

这个语句为 employees 表中的 email 列添加了 UNIQUE 约束。

3. 在多个列上定义 UNIQUE 约束

UNIQUE 约束不仅可以应用于单列,也可以应用于多个列的组合。多个列的值组合必须是唯一的:

CREATE TABLE orders (
    order_id INT,
    product_id INT,
    customer_id INT,
    UNIQUE (order_id, product_id)
);

在此示例中,order_idproduct_id 列的组合必须唯一,这意味着一个订单中只能有一种商品。

4. 删除 UNIQUE 约束

如果要删除列上的 UNIQUE 约束,可以使用 ALTER TABLE 语句:

ALTER TABLE employees
DROP CONSTRAINT unique_email;

这个语句将删除 employees 表中的 unique_email 约束。


UNIQUE 约束的使用场景

  1. 确保数据唯一性
    • UNIQUE 约束通常用于确保某些字段的值在整个表中都是唯一的,如用户名、邮箱、身份证号等。例如,在用户表中,确保每个用户的电子邮件地址是唯一的。
  2. 多列组合的唯一性
    • 当需要确保多个列的组合是唯一时,可以使用 UNIQUE 约束。例如,在订单表中,确保每个订单中相同的商品只能出现一次。
  3. 提高数据一致性
    • 使用 UNIQUE 约束有助于防止重复数据的插入,从而提高数据一致性。通过限制重复,避免出现冗余或无意义的数据。

UNIQUE 约束的注意事项

  1. 多个 NULL
    • 与主键不同,UNIQUE 约束允许列中有 NULL 值,且多个 NULL 值是允许的。在 SQL 标准中,NULL 值被视为“未知值”,因此多个 NULL 值不会被视为重复。
  2. 与主键的区别
    • UNIQUE 约束和主键约束的作用相似,但 UNIQUE 允许空值(NULL),而主键不允许为空且只能有一个主键约束。每个表只能有一个主键,而可以有多个 UNIQUE 约束。
  3. 性能问题
    • 对于大型表,UNIQUE 约束会增加数据库的索引开销。尽管索引有助于加速查询操作,但过多的唯一索引可能会影响写入操作的性能。
  4. 多列唯一性
    • 当使用多个列定义唯一约束时,组合列的每个值必须唯一。这种约束适用于那些单列不能保证唯一性,但组合起来能够保证唯一性的情况。

参考资料