[MySQL实战] 如何定义唯一约束(唯一索引)
创作时间:
作者:
@小白创作中心
[MySQL实战] 如何定义唯一约束(唯一索引)
引用
CSDN
1.
https://blog.csdn.net/xu7382/article/details/136758090
一、什么是唯一约束
唯一约束,指的是为表中的列提供唯一性保证,以确保列中的数据始终是唯一的。有两种方式:
- 将列设为主键
- 为列增加唯一性约束
二、如何定义唯一约束
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;
例子:
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数据库中定义唯一约束的几种方法,并强调了一些注意点。在平时的工作中可以按需选择。
对于不再需要的唯一约束,可以对其进行删除。因为唯一约束本质上就是索引,所以需要使用索引删除语句对其进行删除。
参考资料:
热门推荐
公务员晋升机制越来越透明,凭实绩用干部,是不是不用熬资历了?
糖尿病患者可以安全戒烟,且对健康大有裨益
糖尿病患者如何科学戒烟:从计划到生活调整的全面指南
瓷砖胶的标准等级 瓷砖胶不同等级的区别
Image Flip
两会声音|庞永辉代表:让美育教育浸润青少年成长之路
掌握XRD衍射仪样品制样精髓,提升检测效率与质量
男性保养指南:八大常见措施助你保持健康活力
补牙在医院补便宜还是外面的牙科?精明消费必看:补牙医院与外面牙科的价格大战
哈密瓜的功效与作用、禁忌和食用方法
危机决策的有效策略与实施方法解析
婴儿满月打针需要带什么证件
儿童疫苗查验证明打印攻略:各地办理方法详解
异麦芽酮糖醇糖尿病人能用吗
褚时健:从烟草大王到橙王的传奇人生
跨境电商制胜之道:外贸店如何与优质供应商建立长期合作关系?
加拿大麦克马斯特大学工程学院:专业设置、留学费用及生活指南
什么是钩体病、如何预防?这些事项要注意
王菲最火10首歌,《匆匆那年》《红豆》《我愿意》上榜,听过哪些
藕皮发黑里面正常能吃吗
艺术形象:多维视角下的审美载体与灵魂表达
头孢呋辛钠VS头孢唑肟钠:抗菌大战,谁更胜一筹?
联合技术研发助力科创企业早期融资
每天4杯咖啡,25岁女孩确诊这种病!医生提醒→
3000元预算内的高性能个人电脑装配方案详解
三孩生育政策全面落地:法律视角下的深度解读
C语言实现状态机设计的技巧与策略(附代码详解)
买金条,银行与金店的双重选择
2025年中国人工智能专业人才需求潜力研判:人工智能各类专业人才需求空间广阔
抑酸药有哪些?三类药物作用机制与临床应用详解