[MySQL实战] 如何定义唯一约束(唯一索引)

本文详细介绍了MySQL中如何在建表时和修改时定义唯一约束,包括单列和多列的定义方法,以及如何删除不再需要的唯一约束。重点突出了在不同场景下的操作技巧和注意事项。
摘要由CSDN通过智能技术生成


cover


一、什么是唯一约束

唯一约束,指的是为表中的列提供唯一性保证,以确保列中的数据始终是唯一的。
有两种方式:

  • 将列设为主键
  • 为列增加唯一性约束

 

二、如何定义唯一约束

MySQL中如何定义唯一性约束呢?

有三种方法进行唯一约束的定义:

  • 建表时直接在字段后面增加UNIQUE标识符
  • 建表时在所有列的后面定义唯一约束
  • 已创建的表定义唯一约束

2.1、建表时定义唯一约束–方法1

第一种方法是直接在列的后面增加UNIQUE标识符:

CREATE TABLE `t_test1` (
  `id` bigint NOT NULL PRIMARY KEY COMMENT '主键',
  `name` varchar(50) UNIQUE COMMENT '姓名' ,
  `phone` varchar(20) COMMENT '电话',
  `status` int DEFAULT '10' COMMENT '状态 10启用/20禁用',
  `valid` int DEFAULT '1' COMMENT '是否有效'
) COMMENT='用户表';

说明:

  • UNIQUE 的位置无需处于列的最末尾(如图中所示),后面可定义COMMENT

2.2、建表时定义唯一约束–方法2

第二种方法是在所有列的后面(列定义的最后一行)增加UNIQUE标识符。
语法如下:

UNIQUE $index_name($column_name[,…])

CREATE TABLE `t_test2` (
  `id` bigint NOT NULL PRIMARY KEY COMMENT '主键',
  `name` varchar(50) COMMENT '姓名' ,
  `phone` varchar(20) COMMENT '电话',
  `status` int DEFAULT '10' COMMENT '状态 10启用/20禁用',
  `valid` int DEFAULT '1' COMMENT '是否有效',
  UNIQUE uc_name(name)
) COMMENT='用户表';

说明:

  • uc_name 是唯一索引的名称。
  • 如果写成 UNIQUE (name) ,则唯一索引的名称等于列名。

多个列 添加唯一索引:

CREATE TABLE `t_test2` (
  `id` bigint NOT NULL PRIMARY KEY COMMENT '主键',
  `name` varchar(50) COMMENT '姓名' ,
  `phone` varchar(20) COMMENT '电话',
  `status` int DEFAULT '10' COMMENT '状态 10启用/20禁用',
  `valid` int DEFAULT '1' COMMENT '是否有效',
  UNIQUE uc_id_name(id,`name`)
) COMMENT='用户表';

说明:

  • 只有当id和name都相同时,才认为是相同的数据。下面的数据则认为是不同的
    唯一

也可以通过添加约束的方式定义唯一索引:

CREATE TABLE `t_test3` (
  `id` bigint NOT NULL PRIMARY KEY COMMENT '主键',
  `name` varchar(50) COMMENT '姓名' ,
  `phone` varchar(20) COMMENT '电话',
  `status` int DEFAULT '10' COMMENT '状态 10启用/20禁用',
  `valid` int DEFAULT '1' COMMENT '是否有效',
  CONSTRAINT uc_name UNIQUE(`name`)
) COMMENT='用户表';

注:省略了对多个列增加约束的演示。

2.3、为已创建的表定义唯一约束

如果表已经被创建,也可以对其定义唯一约束。

方法一
语法规则:

ALTER TABLE $table_name ADD UNIQUE [$index_name]($column_name[,…]);

例子:

ALTER TABLE `t_test4`
ADD UNIQUE (`name`);

-- or
ALTER TABLE `t_test4`
ADD UNIQUE uc_name(`name`);
  • 省略唯一索引名称,则其名称和列名相同
  • 多次执行上面的语句,会生成多个唯一索引(针对同一个列)

方法二
语法规则:

ALTER TABLE $table_name ADD CONSTRAINT [$index_name] UNIQUE($column_name[,…]);

例子:

ALTER TABLE `t_test4`
ADD CONSTRAINT UNIQUE(`name`);
-- or
ALTER TABLE `t_test4`
ADD CONSTRAINT uc_name_1 UNIQUE (`name`);
  • CONSTRAINT后面接唯一索引名称,可省略
  • 省略唯一索引名,索引名与列名相同

三、删除唯一约束

当唯一约束不再需要时,可通过下面的方法对其进行删除:

ALTER TABLE `t_test3` DROP INDEX uc_name;

-- 比较
-- ALTER TABLE `t_test3` ADD UNIQUE uc_name (`name`);
  • 在删除唯一约束前,需要知道唯一索引的名称
  • 注意DROP INDEX 中的 INDEX 不能少

比较一下新增唯一索引的脚本:

  • 新增时,ADD 后面接的是 UNIQUE ,执行后会生成一个唯一索引
  • 删除时使用的是DROP INDEX,因为唯一约束是一种索引。

四、问题

4.1、问题1:如何为多个列定义唯一约束?

答:这个问题可参考文章的新增唯一约束部分。下面是其中一个简单的做法:

-- 为已存在的表创建唯一约束
ALTER TABLE `t_test4` ADD UNIQUE uc_id_name(id,`name`);

 

五、总结

  本文讲解了MySQL数据库中定义唯一约束的几种方法,并强调了一些注意点。在平时的工作中可以按需选择。

  对于不再需要的唯一约束,可以对其进行删除。因为唯一约束本质上就是索引,所以需要使用索引删除语句对其进行删除。
 
 


参考资料:
https://www.w3schools.cn/mysql/mysql_unique.asp
https://www.cnblogs.com/sun-yanglu/p/9581701.html

 
 
 
 

  • 36
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值