以下內(nèi)容參考w3school中關(guān)于SQL的教學(xué),可以點(diǎn)擊藍(lán)字參考原文。
DISTINCT和UNIQUE意思分別為截然不同的和獨(dú)一無(wú)二的。看起來(lái)好像很相似,但是實(shí)際上用法卻完全不同。
一、UNIQUE
1.UNIQUE定義
UNIQUE 約束唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄。
UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證。
PRIMARY KEY 擁有自動(dòng)定義的 UNIQUE 約束。
請(qǐng)注意,每個(gè)表可以有多個(gè) UNIQUE 約束,但是每個(gè)表只能有一個(gè) PRIMARY KEY 約束。
簡(jiǎn)單來(lái)說(shuō),UNIQUE的使用就是為了保證數(shù)據(jù)庫(kù)表同一列中不會(huì)出現(xiàn)重復(fù)的數(shù)據(jù),比如說(shuō)學(xué)生表的學(xué)號(hào),這一欄就應(yīng)該用UNIQUE約束,因?yàn)椴粫?huì)也不應(yīng)該出現(xiàn)兩個(gè)同樣學(xué)號(hào)的學(xué)生。
2.UNIQUE用法(MySQL)
- 在 "Persons" 表創(chuàng)建時(shí)在 "Id_P" 列創(chuàng)建 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 約束,以及為多個(gè)列定義 UNIQUE 約束,請(qǐng)使用下面的 SQL 語(yǔ)法:
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是為這個(gè)約束取的名字,UNIQUE意思是這個(gè)約束類型為唯一型約束,約束的列為Id_P和LastName。
- 當(dāng)表已被創(chuàng)建時(shí),如需在 "Id_P" 列創(chuàng)建 UNIQUE 約束,請(qǐng)使用下列 SQL:
ALTER TABLE Persons
ADD UNIQUE (Id_P)
- 如需命名 UNIQUE 約束,并定義多個(gè)列的 UNIQUE 約束,請(qǐng)使用下面的 SQL 語(yǔ)法:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
- 如需撤銷 UNIQUE 約束,請(qǐng)使用下面的 SQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID
二、DISTINCT
1.DISTINCT定義
在表中,可能會(huì)包含重復(fù)值。有時(shí)我們希望僅僅列出不同(distinct)的值。
關(guān)鍵詞 DISTINCT 用于在查詢時(shí)返回唯一不同的值。
不同之處:UNIQUE不允許表中某一列存在相同的值,而DISTINCT是在表中可能存在不同值的時(shí)候,查詢到的值有重復(fù)時(shí)僅列出一次。
2.DISTINCT用法
如果要從 "Company" 列中選取所有的值,我們需要使用 SELECT 語(yǔ)句:
SELECT Company FROM Orders
注:如果表Orders的Company列用UNIQUE修飾,則表中Company列不可能出現(xiàn)下面兩個(gè)W3School的情況。
"Orders"表:
| Company | OrderNumber |
|---|---|
| IBM | 1122 |
| W3School | 2333 |
| Apple | 3334 |
| W3School | 6668 |
結(jié)果:
| Company |
|---|
| IBM |
| W3School |
| Apple |
| W3School |
注意,在結(jié)果集中,W3School 被列出了兩次。
如需從 Company" 列中僅選取唯一不同的值,我們需要使用 SELECT DISTINCT 語(yǔ)句:
SELECT DISTINCT Company FROM Orders
| Company |
|---|
| IBM |
| W3School |
| Apple |
現(xiàn)在,在結(jié)果集中,"W3School" 僅被列出了一次。