- SQL 教程
- SQL - 首页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL 数据库
- SQL - 创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL - 备份数据库
- SQL 表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 截断表
- SQL - 克隆表
- SQL - 临时表
- SQL - 修改表
- SQL - 删除表
- SQL - 删除表数据
- SQL - 约束
- SQL 查询
- SQL - 插入查询
- SQL - 选择查询
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - 更新查询
- SQL - 删除查询
- SQL - 排序结果
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布尔 (BIT) 运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY, ALL 运算符
- SQL - EXISTS 运算符
- SQL - CASE
- SQL - NOT 运算符
- SQL - 不等于
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - 内连接
- SQL - 左连接
- SQL - 右连接
- SQL - 交叉连接
- SQL - 全连接
- SQL - 自连接
- SQL - 删除连接
- SQL - 更新连接
- SQL - 左连接 vs 右连接
- SQL - UNION vs JOIN
- SQL 键
- SQL - 唯一键
- SQL - 主键
- SQL - 外键
- SQL - 组合键
- SQL - 候选键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - 唯一索引
- SQL - 聚集索引
- SQL - 非聚集索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - MIN & MAX
- SQL - NULL 函数
- SQL - CHECK 约束
- SQL - DEFAULT 约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期和时间
- SQL - 游标
- SQL - 通用表表达式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
SQL - 唯一键
SQL 唯一键
SQL 唯一键(或唯一约束)不允许表中某列出现重复值。它防止两条记录在同一列中具有相同的值。
唯一键只是主键的替代方案;因为唯一约束和主键约束都确保表中某列的唯一性。
假设我们有一个名为 CUSTOMERS 的表,用于存储银行中的客户记录,如果其中一列名为 MOBILE_NO,那么我们可以在此列上创建一个唯一约束,以防止输入具有相同手机号码的多个记录。
唯一键的特性
以下是 SQL 数据库中唯一键的一些关键特性的列表:
唯一键类似于表中的主键,但它可以接受 NULL 值,而主键则不能。
它只接受一个 NULL 值。
它不能有重复值。
它也可以用作另一个表中的外键。
一个表可以有多个唯一列。
创建 SQL 唯一键
您可以使用 SQL 中的 UNIQUE 关键字在数据库表上创建唯一键。创建数据库表时,请在列(需要在此列上定义此键)旁边指定此 SQL 关键字。
语法
以下是创建表中某列唯一键约束的语法:
CREATE TABLE table_name( column1 datatype UNIQUE KEY, column2 datatype, ..... ..... columnN datatype );
示例
使用以下 SQL 查询,我们正在创建一个名为 CUSTOMERS 的表,其中包含五个字段 ID、NAME、AGE、ADDRESS 和 SALARY。在这里,我们正在 ID 列上创建一个唯一键。
CREATE TABLE CUSTOMERS ( ID INT NOT NULL UNIQUE KEY, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2) );
输出
以下是上述 SQL 语句的输出:
Query OK, 0 rows affected (0.03 sec)
验证
由于我们在名为 ID 的列上创建了一个唯一约束,因此我们不能在其中插入重复值。让我们通过将以下具有重复 ID 值的记录插入到 CUSTOMERS 表中来进行验证:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (1, 'Khilan', 25, 'Delhi', 1500.00 );
执行后,将显示以下错误,证明 ID 列上确实定义了唯一约束:
ERROR 1062 (23000): Duplicate entry '1' for key 'customers.ID'
多个唯一键
我们可以在 SQL 表中的一列或多列上创建一个或多个唯一键。
语法
以下是创建表中多列唯一键约束的语法:
CREATE TABLE table_name( column1 datatype UNIQUE KEY, column2 datatype UNIQUE KEY, ..... ..... columnN datatype );
示例
假设我们使用 CREATE TABLE 语句在 SQL 数据库中创建了一个名为 CUSTOMERS 的表。如下所示,在 ID 和 NAME 列上定义了一个唯一键,使用了 UNIQUE 关键字:
CREATE TABLE BUYERS ( ID INT NOT NULL UNIQUE KEY, NAME VARCHAR(20) NOT NULL UNIQUE KEY, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2) );
输出
以下是上述 SQL 语句的输出:
Query OK, 0 rows affected (0.03 sec)
验证
由于我们在名为 ID 和 NAME 的列上创建了一个唯一约束,因此我们不能在其中插入重复值。让我们通过使用以下 INSERT 语句将重复记录插入到 BUYERS 表中来进行验证:
INSERT INTO BUYERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (1, 'Rajesh', 25, 'Delhi', 1500.00 );
显示以下错误:
ERROR 1062 (23000): Duplicate entry '1' for key 'customers.ID'
同样,如果您尝试插入另一条记录,其 NAME 列的值与之前重复:
INSERT INTO BUYERS VALUES (2, 'Ramesh', 36, 'Chennai', 1700.00 );
将生成以下错误:
ERROR 1062 (23000): Duplicate entry 'Ramesh' for key 'buyers.NAME'
现有列上的唯一键
到目前为止,我们只看到了如何在创建新表时在列上定义唯一键。但是,我们也可以在表的现有列上添加唯一键。这是使用 ALTER TABLE... ADD CONSTRAINT 语句完成的。
语法
以下是创建表现有列上唯一约束的语法:
ALTER TABLE table_name ADD CONSTRAINT UNIQUE_KEY_NAME UNIQUE (column_name);
注意 - 这里的 UNIQUE_KEY_NAME 只是唯一键的名称。指定它是可选的,用于从表中的列删除约束。
示例
在此示例中,我们在现有 CUSTOMERS 表的 ADDRESS 列上添加了一个唯一键:
ALTER TABLE CUSTOMERS ADD CONSTRAINT UNIQUE_ADDRESS UNIQUE(ADDRESS);
输出
以下是上述语句的输出:
Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0
删除 SQL 唯一键
如果您已经在列上创建了一个唯一键,则可以在不需要时将其删除。要从表的列中删除唯一键,您需要使用 ALTER TABLE 语句。
语法
以下是删除表列中唯一约束的 SQL 查询:
ALTER TABLE table_name DROP CONSTRAINT UNIQUE_KEY_NAME;
示例
考虑上面创建的 CUSTOMERS 表,我们在名为 ID、NAME 和 ADDRESS 的三列上创建了唯一约束;通过执行以下 SQL 查询,从 ADDRESS 列删除唯一约束:
ALTER TABLE CUSTOMERS DROP CONSTRAINT UNIQUE_ADDRESS;
输出
以下是上述语句的输出:
Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
现在,让我们插入 ADDRESS 列的两条重复记录:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Ahmedabad', 1500.00 );
如果您验证表的内容,您可以观察到两条记录都具有相同的 ADDRESS,如下所示:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Ahmedabad | 1500.00 |