前言

在 SQL 中区分 UNIQUE 和 DISTINCT 命令可能会让人感到困惑。通过这篇文章,你可以用最简单的方式理解它们的不同之处。

尽管 UNIQUE 和 DISTINCT 在 SQL 中有些类似,但它们仍然是不同的概念。这篇文章将首先讲解 UNIQUE 和 DISTINCT 关键字背后的概念及其差异。

SQL 中的 UNIQUE 关键字

UNIQUE 约束保证某列中的每个值都与其他值不同。由于值不能重复,使用 UNIQUE 关键字可以防止同一列中出现相同的值。你可以将 UNIQUE 关键字应用到多个列上。带有 UNIQUE 约束的列可以包含 NULL 值。

以下是关于 UNIQUE 约束的一些主要点:

  1. 防重复记录:如果两个元组具有相同的 UNIQUE 约束,则查询会返回错误信息。
  2. ALTER TABLE 修改 UNIQUE:ALTER TABLE 语句可用于添加或移除已有表的 UNIQUE 约束。
  3. 自动创建唯一索引:指定 UNIQUE 约束时,会立即创建一个唯一索引,从而使数据库能够有效地维护数据的唯一性。
  4. 保护数据完整性:当你希望某个或某些列中的数据是唯一时,应使用 UNIQUE 约束。这是保护数据库中数据完整性的强大工具。

示例

CREATE TABLE students(
    Student_Id INT UNIQUE,
    Student_name VARCHAR(25),
    Student_marks INT
);

INSERT INTO students VALUES(1, 'Harry', 95);
INSERT INTO students VALUES(2, 'John', 85);
INSERT INTO students VALUES(3, 'Larry', 63);
INSERT INTO students VALUES(4, 'Tom', 95);
INSERT INTO students VALUES(5, 'Angela', 63);

SELECT * FROM students;

在上述示例中,将创建一个包含三列的表,并对 Student_Id 列应用了 UNIQUE 关键字,确保插入到表中的每个元组的 Student_Id 字段是唯一的。如果两个元组有相同的 Student_Id 字段,则会返回错误信息。

使用 ALTER TABLE 修改 SQL 中的 UNIQUE 约束

ALTER TABLE 用于更改现有表中 UNIQUE 约束的特性,例如添加或移除约束中的列。

语法

ALTER TABLE <表名>
ADD UNIQUE (<列名>);

删除 UNIQUE 约束

使用 DROP 语句和 UNIQUE 关键字可以从表中移除 UNIQUE 约束。

语法

ALTER TABLE <表名>
DROP CONSTRAINT <约束名>;

SQL 中的 DISTINCT 关键字

DISTINCT 通常与 SELECT 关键字一起使用。在某些情况下,你希望在查询结果中不包含重复记录。这时可以使用 SELECT DISTINCT 关键字从表中检索字段唯一值,同时应用条件(如特定列)。请求字段唯一值可能出于多种原因,例如报告或分析。

DISTINCT 的主要特点

  1. 用途广泛:DISTINCT 主要用于移除重复值、统计唯一值、数据分组以及生成唯一项列表等操作。
  2. 提高数据质量:DISTINCT 的主要优点包括节省时间和精力,并提升数据的意义和实用性。
  3. 单列操作:DISTINCT 一次只能作用于单个列,因此在消除多列的重复值时需要使用 GROUP BY 子句。
  4. 优化查询:尽可能将 DISTINCT 与索引配合使用,并避免子查询和大数据集。

示例

CREATE TABLE students(
    Student_Id INT,
    Student_name VARCHAR(25),
    Student_marks INT
);

INSERT INTO students VALUES(1, 'Harry', 95);
INSERT INTO students VALUES(2, 'John', 85);
INSERT INTO students VALUES(3, 'Larry', 63);
INSERT INTO students VALUES(4, 'Tom', 95);
INSERT INTO students VALUES(5, 'Angela', 63);

SELECT DISTINCT Student_marks FROM students;

在上述示例中,Student_marks 列中有重复的 63 和 95 值,但由于使用了 DISTINCT 关键字,查询结果中只保留唯一的 Student_marks 值。

DISTINCT 与聚合函数的结合使用

可以将聚合函数(如 COUNT、AVG、MAX 等)与 DISTINCT 关键字结合使用。以下是一些示例说明:

用法示例

DISTINCT COUNT

DISTINCT COUNT() 返回表中具有唯一字段数据的记录数。例如:

SELECT COUNT(DISTINCT Student_marks) FROM students;

输出:

3

DISTINCT AVG

DISTINCT AVG() 返回列中的唯一数值的平均值。例如:

SELECT AVG(DISTINCT Student_marks) FROM students;

输出:

81.0

DISTINCT MAX

DISTINCT MAX 返回所选列的最大值。例如:

SELECT MAX(DISTINCT Student_marks) FROM students;

输出:

95

UNIQUE 和 DISTINCT 的区别

序号UNIQUEDISTINCT
1UNIQUE 关键字用于防止同一列中出现重复值DISTINCT 关键字用于删除查询结果中的重复值
2当需要把两个 NULL 值视为不同值时,应使用 UNIQUEDISTINCT 在某些情况下可以同时不同与相同地处理 NULL 值
3UNIQUE 可以用于单个或多个列,标识记录的唯一性DISTINCT 只能影响查询结果集
4UNIQUE 约束可充当主键DISTINCT 仅在检索结果时有效

结论

本文探讨了 UNIQUE 和 DISTINCT 关键字的基本概念、它们的区别及领域中的常见问题,对它们的差异进行了清晰的定义。希望你喜欢这篇文章,并对这一主题有了深入了解。



MySQL中UNIQUE与DISTINCT的区别插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://www.choupangxia.com/2025/09/27/mysql-unique-distinct/