Skip to content

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_codesemester 列的组合值必须是唯一的。

示例 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 值)不允许
每个表的数量可以有多个只能有一个
索引类型创建唯一索引创建唯一索引
外键引用可以被外键引用通常被外键引用

注意事项

  1. NULL 值处理:UNIQUE 约束允许列中存在一个 NULL 值(因为 NULL 不等于任何值,包括它自己)。

  2. 性能影响:UNIQUE 约束会创建唯一索引,这可以提高查询性能,但可能会降低插入、更新和删除操作的性能。

  3. 复合唯一约束:当多个列组合使用 UNIQUE 约束时,只有当所有列的值都相同时才会被视为重复。

  4. 约束命名:为 UNIQUE 约束命名可以使后续的管理和维护更加方便。

小结

SQL UNIQUE 约束是一种用于确保列或列组合中的值唯一的约束。它可以应用于单个列或多个列的组合,确保数据的一致性和完整性。UNIQUE 约束与 PRIMARY KEY 约束类似,但允许 NULL 值,且每个表可以有多个 UNIQUE 约束。