Appearance
SQL UNIQUE
SQL UNIQUE 约束用于确保列中的所有值都是唯一的,即不允许有重复的值。UNIQUE 约束可以应用于单个列或多个列的组合。
语法
创建表时添加 UNIQUE 约束
单个列的 UNIQUE 约束
sql
CREATE TABLE table_name (
column1 datatype UNIQUE,
column2 datatype,
...
);多个列的 UNIQUE 约束(复合唯一约束)
sql
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
UNIQUE (column1, column2)
);命名 UNIQUE 约束
sql
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
CONSTRAINT constraint_name UNIQUE (column1, column2)
);表创建后添加 UNIQUE 约束
sql
ALTER TABLE table_name
ADD UNIQUE (column1, column2);sql
-- 命名约束
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2);移除 UNIQUE 约束
sql
ALTER TABLE table_name
DROP INDEX constraint_name;
-- 注意:在不同数据库系统中,移除 UNIQUE 约束的语法可能不同示例
示例 1:创建表时添加单个列的 UNIQUE 约束
sql
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
student_id VARCHAR(20) UNIQUE NOT NULL,
age INT,
grade VARCHAR(20)
);执行结果:创建一个名为 students 的表,其中 student_id 列的值必须是唯一的。
示例 2:创建表时添加多个列的 UNIQUE 约束
sql
CREATE TABLE courses (
id INT PRIMARY KEY AUTO_INCREMENT,
course_code VARCHAR(20) NOT NULL,
semester VARCHAR(10) NOT NULL,
course_name VARCHAR(50) NOT NULL,
UNIQUE (course_code, semester)
);执行结果:创建一个名为 courses 的表,其中 course_code 和 semester 列的组合值必须是唯一的。
示例 3:插入数据到有 UNIQUE 约束的表
sql
-- 成功插入数据
INSERT INTO students (name, student_id, age, grade)
VALUES ('张三', '2023001', 18, '高三');
-- 成功插入数据
INSERT INTO students (name, student_id, age, grade)
VALUES ('李四', '2023002', 17, '高二');
-- 失败插入数据(student_id 重复)
INSERT INTO students (name, student_id, age, grade)
VALUES ('王五', '2023001', 19, '高三');示例 4:表创建后添加 UNIQUE 约束
sql
-- 创建表
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
student_id VARCHAR(20) NOT NULL,
age INT,
grade VARCHAR(20)
);
-- 添加 UNIQUE 约束到 student_id 列
ALTER TABLE students
ADD UNIQUE (student_id);示例 5:命名 UNIQUE 约束
sql
-- 创建表时命名约束
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
student_id VARCHAR(20) NOT NULL,
age INT,
grade VARCHAR(20),
CONSTRAINT unique_student_id UNIQUE (student_id)
);
-- 表创建后命名约束
ALTER TABLE students
ADD CONSTRAINT unique_student_id UNIQUE (student_id);UNIQUE 约束与 PRIMARY KEY 约束的区别
| 特性 | UNIQUE 约束 | PRIMARY KEY 约束 |
|---|---|---|
| 允许 NULL 值 | 允许(但只能有一个 NULL 值) | 不允许 |
| 每个表的数量 | 可以有多个 | 只能有一个 |
| 索引类型 | 创建唯一索引 | 创建唯一索引 |
| 外键引用 | 可以被外键引用 | 通常被外键引用 |
注意事项
NULL 值处理:UNIQUE 约束允许列中存在一个 NULL 值(因为 NULL 不等于任何值,包括它自己)。
性能影响:UNIQUE 约束会创建唯一索引,这可以提高查询性能,但可能会降低插入、更新和删除操作的性能。
复合唯一约束:当多个列组合使用 UNIQUE 约束时,只有当所有列的值都相同时才会被视为重复。
约束命名:为 UNIQUE 约束命名可以使后续的管理和维护更加方便。
小结
SQL UNIQUE 约束是一种用于确保列或列组合中的值唯一的约束。它可以应用于单个列或多个列的组合,确保数据的一致性和完整性。UNIQUE 约束与 PRIMARY KEY 约束类似,但允许 NULL 值,且每个表可以有多个 UNIQUE 约束。