以下内容参考w3school中关于SQL的教学,可以点击蓝字参考原文。
DISTINCT和UNIQUE意思分别为截然不同的和独一无二的。看起来好像很相似,但是实际上用法却完全不同。
一、UNIQUE
1.UNIQUE定义
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
简单来说,UNIQUE的使用就是为了保证数据库表同一列中不会出现重复的数据,比如说学生表的学号,这一栏就应该用UNIQUE约束,因为不会也不应该出现两个同样学号的学生。
2.UNIQUE用法(MySQL)
- 在 "Persons" 表创建时在 "Id_P" 列创建 UNIQUE 约束:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)
- 需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,请使用下面的 SQL 语法:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)
CONSTRAINT 单词意为约束,在后面的uc_PersonID是为这个约束取的名字,UNIQUE意思是这个约束类型为唯一型约束,约束的列为Id_P和LastName。
- 当表已被创建时,如需在 "Id_P" 列创建 UNIQUE 约束,请使用下列 SQL:
ALTER TABLE Persons
ADD UNIQUE (Id_P)
- 如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
- 如需撤销 UNIQUE 约束,请使用下面的 SQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID
二、DISTINCT
1.DISTINCT定义
在表中,可能会包含重复值。有时我们希望仅仅列出不同(distinct)的值。
关键词 DISTINCT 用于在查询时返回唯一不同的值。
不同之处:UNIQUE不允许表中某一列存在相同的值,而DISTINCT是在表中可能存在不同值的时候,查询到的值有重复时仅列出一次。
2.DISTINCT用法
如果要从 "Company" 列中选取所有的值,我们需要使用 SELECT 语句:
SELECT Company FROM Orders
注:如果表Orders的Company列用UNIQUE修饰,则表中Company列不可能出现下面两个W3School的情况。
"Orders"表:
Company | OrderNumber |
---|---|
IBM | 1122 |
W3School | 2333 |
Apple | 3334 |
W3School | 6668 |
结果:
Company |
---|
IBM |
W3School |
Apple |
W3School |
注意,在结果集中,W3School 被列出了两次。
如需从 Company" 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句:
SELECT DISTINCT Company FROM Orders
Company |
---|
IBM |
W3School |
Apple |
现在,在结果集中,"W3School" 仅被列出了一次。