MySQL中UNIQUE与DISTINCT的区别
前言
在 SQL 中区分 UNIQUE 和 DISTINCT 命令可能会让人感到困惑。通过这篇文章,你可以用最简单的方式理解它们的不同之处。
尽管 UNIQUE 和 DISTINCT 在 SQL 中有些类似,但它们仍然是不同的概念。这篇文章将首先讲解 UNIQUE 和 DISTINCT 关键字背后的概念及其差异。
SQL 中的 UNIQUE 关键字
UNIQUE 约束保证某列中的每个值都与其他值不同。由于值不能重复,使用 UNIQUE 关键字可以防止同一列中出现相同的值。你可以将 UNIQUE 关键字应用到多个列上。带有 UNIQUE 约束的列可以包含 NULL 值。
以下是关于 UNIQUE 约束的一些主要点:
- 防重复记录:如果两个元组具有相同的 UNIQUE 约束,则查询会返回错误信息。
- ALTER TABLE 修改 UNIQUE:ALTER TABLE 语句可用于添加或移除已有表的 UNIQUE 约束。
- 自动创建唯一索引:指定 UNIQUE 约束时,会立即创建一个唯一索引,从而使数据库能够有效地维护数据的唯一性。
- 保护数据完整性:当你希望某个或某些列中的数据是唯一时,应使用 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 的主要特点
- 用途广泛:DISTINCT 主要用于移除重复值、统计唯一值、数据分组以及生成唯一项列表等操作。
- 提高数据质量:DISTINCT 的主要优点包括节省时间和精力,并提升数据的意义和实用性。
- 单列操作:DISTINCT 一次只能作用于单个列,因此在消除多列的重复值时需要使用 GROUP BY 子句。
- 优化查询:尽可能将 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 的区别
序号 | UNIQUE | DISTINCT |
1 | UNIQUE 关键字用于防止同一列中出现重复值 | DISTINCT 关键字用于删除查询结果中的重复值 |
2 | 当需要把两个 NULL 值视为不同值时,应使用 UNIQUE | DISTINCT 在某些情况下可以同时不同与相同地处理 NULL 值 |
3 | UNIQUE 可以用于单个或多个列,标识记录的唯一性 | DISTINCT 只能影响查询结果集 |
4 | UNIQUE 约束可充当主键 | DISTINCT 仅在检索结果时有效 |
结论
本文探讨了 UNIQUE 和 DISTINCT 关键字的基本概念、它们的区别及领域中的常见问题,对它们的差异进行了清晰的定义。希望你喜欢这篇文章,并对这一主题有了深入了解。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:http://www.choupangxia.com/2025/09/27/mysql-unique-distinct/