SQL UNIQUE 约束详解
UNIQUE
约束在 SQL 中用于确保某列或某几列的组合值在表中是唯一的。这意味着在应用了 UNIQUE
约束的列中,不能有两条记录具有相同的值,除非该值为 NULL
。UNIQUE
约束有助于维护数据的完整性,特别是在需要确保某些标识符(如电子邮件地址、电话号码等)在整个表中唯一的情况下。
特点和使用场景
- 允许 NULL 值:与
PRIMARY KEY
不同,UNIQUE
约束允许列中有NULL
值,并且可以有多个NULL
值。 - 多列唯一性:可以在多个列上设置
UNIQUE
约束,这样只有当这些列的组合值唯一时,才能插入新记录。 - 多个 UNIQUE 约束:一个表可以有多个
UNIQUE
约束,但只能有一个PRIMARY KEY
约束。
SQL UNIQUE 约束语法
在创建表时,可以为特定列或多个列定义 UNIQUE
约束:
CREATE TABLE table_name
(
column1 data_type UNIQUE,
column2 data_type UNIQUE,
...
);
或者,为多个列定义一个 UNIQUE
约束:
CREATE TABLE table_name
(
column1 data_type,
column2 data_type,
UNIQUE (column1, column2)
...
);
代码示例
假设我们正在创建一个名为 Persons
的表,其中包含人的 ID、姓氏、名字和电子邮件地址。我们希望确保 P_Id
(假设为电子邮件地址)在整个表中是唯一的。
CREATE TABLE Persons (
P_Id varchar(255) UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int
);
在这个例子中:
P_Id
列被定义为UNIQUE
,这意味着在插入或更新Persons
表的记录时,P_Id
的值必须是唯一的,不能有两条记录具有相同的P_Id
值。- 如果尝试插入具有已存在的
P_Id
值的新记录,数据库系统将返回错误。
在多列上应用 UNIQUE 约束
如果我们需要确保 LastName
和 FirstName
的组合是唯一的,可以这样定义:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int,
UNIQUE (LastName, FirstName)
);
在这个例子中,LastName
和 FirstName
的组合值必须是唯一的。如果尝试插入具有相同姓氏和名字的另一条记录,数据库系统将返回错误。