跳到主要内容

SQL UNIQUE约束

提示
  1. 定义UNIQUE 约束保证在一个数据库表的列中所有的值都是不重复的,确保每个值的唯一性。
  2. 创建 UNIQUE 约束:在创建表时可以定义 UNIQUE 约束,或者使用 ALTER TABLE 命令为现有的列添加 UNIQUE 约束。
  3. 重复值导致错误:如果尝试向具有 UNIQUE 约束的列中插入重复值,SQL 操作会产生错误。这有助于维护数据的完整性和准确性。

在 SQL 中,列中的 UNIQUE 约束意味着该列必须具有唯一的值。

示例

CREATE TABLE Colleges (
college_code VARCHAR(20) UNIQUE,
college_name VARCHAR(50)
);

这里,college_code 列的值必须是唯一的。

SQL UNIQUE 约束语法

SQL UNIQUE 约束的语法是:

CREATE TABLE table_name (
column_name data_type UNIQUE
);

这里,

  • table_name 是要创建的表的名称
  • column_name 是要实施约束的列的名称
  • data_type 是列的数据类型,如 INTVARCHAR 等。

创建 UNIQUE 约束

我们可以在创建表时实施 UNIQUE 约束。例如,

CREATE TABLE Colleges (
college_id INT NOT NULL UNIQUE,
college_code VARCHAR(20) UNIQUE,
college_name VARCHAR(50)
);

-- 向 Colleges 表插入值
INSERT INTO Colleges(college_id, college_code, college_name)
VALUES (1, "ARD12", "Star Public School"), (2, "ARD13", "Galaxy School");

这里,college_idcollege_code 都有 UNIQUE 约束。

由于我们已向 college_idcollege_code 插入了唯一值,因此 INSERT INTO 命令成功运行。

使用 Alter Table 添加 UNIQUE 约束

我们还可以使用 ALTER TABLE 命令为现有列添加 UNIQUE 约束。例如,

对于单个列

-- 为现有列添加 unique 约束
ALTER TABLE Colleges
ADD UNIQUE (college_id);

这里,SQL 命令为现有 Colleges 表中的 college_id 列添加了 UNIQUE 约束。

对于多个列

-- 为多个列添加 unique 约束
ALTER TABLE Colleges
ADD UNIQUE Unique_College (college_id, college_code);

这里,SQL 命令为现有 Colleges 表中的 college_idcollege_code 列添加了 UNIQUE 约束。

此外,Unique_College 是为 college_idcollege_code 列定义的 UNIQUE 约束的名称。

注意: 我们的在线 SQL 编辑器不支持此操作,因为它是基于 SQLite 的。

插入重复值时出现错误

如果我们尝试在具有 UNIQUE 约束的列中插入重复值,我们将得到错误。

CREATE TABLE Colleges (
college_id INT NOT NULL UNIQUE,
college_code VARCHAR(20) UNIQUE,
college_name VARCHAR(50)
);

-- 向 Colleges 表插入值
-- college_code 有重复值
INSERT INTO Colleges(college_id, college_code, college_name)
VALUES (1, "ARD12", "Star Public School"), (2, "ARD12", "Galaxy School");

这里,我们尝试将 ARD12 插入到不同行的 college_code 列中。因此,INSERT INTO 命令导致错误。

为唯一值创建 UNIQUE INDEX

如果我们想为列中的唯一值创建索引,我们使用 CREATE UNIQUE INDEX 约束。例如,

CREATE UNIQUE INDEX college_index
ON Colleges(college_code);

这里,SQL 命令在 Colleges 表中使用 college_code 列创建了名为 college_index 的唯一索引。

注意: 创建索引不会更改表中的原始数据。

推荐阅读

](/tutorials/sql/not-null)