SQL唯一约束

在本教程中,将学习如何使用SQL UNIQUE约束强制列或一组列中值的唯一性。

1. 什么是SQL UNIQUE约束

有时,希望确保一列或多列中的值不重复。 例如,employees表中不能接受的重复电子邮件。由于电子邮件列不是主键的一部分,因此防止电子邮件列中重复值的唯一方法是使用UNIQUE约束。

根据定义,SQL UNIQUE约束定义了一个规则,该规则可防止存储在不参与主键的特定列中有重复值。

UNIQUE与PRIMARY KEY约束比较

PRIMARY KEY约束最多只能有一个,而表中可以有多个UNIQUE约束。 如果表中有多个UNIQUE约束,则所有UNIQUE约束必须在不同的列集。

与PRIMARY KEY约束不同,UNIQUE约束允许NULL值。 这取决于RDBMS要考虑NULL值是否唯一。

例如,MySQL将NULL值视为不同的值,因此,可以在参与UNIQUE约束的列中存储多个NULL值。 但是,Microsoft SQL Server或Oracle数据库不是这种情况。

下表说明了UNIQUE约束和PRIMARY KEY约束之间的区别:

比较项PRIMARY KEY约束UNIQUE约束
约束的数量一个多个
NULL值不允许允许

2. 创建UNIQUE约束

通常,在创建表时创建UNIQUE约束。 以下CREATE TABLE语句定义users表,其中username列是唯一的。

CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL
);

要为列创建UNIQUE约束,需要在列定义中添加UNIQUE关键字。 在这个示例中,创建了UNIQUE约束作为列约束。

如果插入或更新与username列中已存在的值相同的值,则RDBMS将拒绝更改并返回错误。以下语句等效于使用表约束语法创建的UNIQUE约束的上述语句。

CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    CONSTRAINT uc_username UNIQUE (username)
);

在这个示例中,将CONSTRAINT子句放在CREATE TABLE语句的末尾。

3. 将UNIQUE约束添加到现有表

如果表已存在,则可以为列添加UNIQUE约束,前提条件是参与UNIQUE约束的列或列组合必须包含唯一值。

假设创建的users表没有为username列定义UNIQUE约束。 要将UNIQUE约束添加到username列,请使用ALTER TABLE语句,如下所示:

ALTER TABLE users
ADD CONSTRAINT uc_username UNIQUE(username);

如果要添加新列并为创建UNIQUE约束,请使用以下形式的ALTER TABLE语句。

ALTER TABLE users
ADD new_column data_type UNIQUE;

例如,以下语句将带有UNIQUE约束的email列添加到users表。

ALTER TABLE users
ADD email VARCHAR(255) UNIQUE;

4. 删除UNIQUE约束

要删除UNIQUE约束,请使用ALTER TABLE语句,如下所示:

ALTER TABLE table_name
DROP CONSTRAINT unique_constraint_name;

例如,要删除users表中的uc_username唯一约束,请使用以下语句。

ALTER TABLE users
DROP CONSTRAINT uc_username;

在本教程中,我们学习了UNIQUE约束以及如何应用它来强制一列或多列中值的唯一性。

        原文作者:SQL教程
        原文地址: https://www.yiibai.com/sql/sql-unique-constraint.html
        本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
    点赞