首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> SQL 基礎

SQL UNIQUE 約束完整指南:建立、命名與移除唯一性限制

     編輯:SQL 基礎

SQL UNIQUE 約束完整指南


什麼是 UNIQUE 約束?

UNIQUE 約束的核心功能是確保資料表中每一筆記錄的唯一性。它保證特定欄位或欄位組合的值不會重複,讓每一列資料都能被精確識別。雖然 PRIMARY KEY 也具備唯一性,但兩者有關鍵差異:一張資料表只能擁有一個 PRIMARY KEY,卻可以建立多個 UNIQUE 約束。此外,PRIMARY KEY 隱含了 NOT NULL 與 UNIQUE 兩項特性,而 UNIQUE 約束允許欄位包含 NULL 值(視資料庫實作而定)。


在 CREATE TABLE 時建立 UNIQUE 約束

單一欄位的基本語法

不同資料庫系統的語法略有差異,以下示範在建立 Persons 表時,對 P_Id 欄位套用 UNIQUE 約束:

MySQL

CREATE TABLE Persons (
  P_Id int NOT NULL,
  LastName varchar(255) NOT NULL,
  FirstName varchar(255),
  Address varchar(255),
  City varchar(255),
  UNIQUE (P_Id)
);

SQL Server / Oracle / MS Access

CREATE TABLE Persons (
  P_Id int NOT NULL UNIQUE,
  LastName varchar(255) NOT NULL,
  FirstName varchar(255),
  Address varchar(255),
  City varchar(255)
);

命名約束與複合唯一鍵

為了方便後續管理,建議為約束命名,並可針對多欄位組合定義唯一性。以下語法適用於主流資料庫:

CREATE TABLE Persons (
  P_Id int NOT NULL,
  LastName varchar(255) NOT NULL,
  FirstName varchar(255),
  Address varchar(255),
  City varchar(255),
  CONSTRAINT uc_PersonID UNIQUE (P_Id, LastName)
);

這裡的 uc_PersonID 是自訂約束名稱,(P_Id, LastName) 表示這兩個欄位的組合必須唯一。


使用 ALTER TABLE 新增 UNIQUE 約束

若資料表已存在,可透過 ALTER TABLE 追加約束:

單一欄位

ALTER TABLE Persons
ADD UNIQUE (P_Id);

命名與複合欄位

ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id, LastName);

移除 UNIQUE 約束

移除語法因資料庫而異,請依實際環境選擇:

MySQL

ALTER TABLE Persons
DROP INDEX uc_PersonID;

SQL Server / Oracle / MS Access

ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID;

實務建議

  • 業務邏輯上不可重複的欄位(如身分證字號、Email、帳號)務必加上 UNIQUE 約束。
  • 複合唯一鍵常用於「同一用戶不得重複收藏同一商品」等場景。
  • 命名約束時採用一致前綴(如 uk_ 或 uc_),利於維護。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved