Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL实现条件唯一性

MySQL实现条件唯一性

作者头像
用户1148526
发布于 2022-05-19 05:33:21
发布于 2022-05-19 05:33:21
94300
代码可运行
举报
文章被收录于专栏:Hadoop数据仓库Hadoop数据仓库
运行总次数:0
代码可运行

在Oracle中可以使用函数索引来实现,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create unique index xpto_table_idx1 on xpto_table(case when status_x <>5 then obj_x else null end);

当status_x<>5时,obj_x的值唯一,否则可以重复。在MySQL中不支持这样的功能,但可以通过虚拟列来实现。看下面一个简单例子。

需求:表t1有a、b、c三列,a为主键,仅当t1.b=1时,t1.c的值唯一。

实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 创建示例表并添加数据
create table t1 (a int primary key, b int, c int);
insert into t1 values (1,1,10),(2,2,20),(3,3,30);

-- 创建虚拟列
alter table t1 add flag int generated always as (if(b =1,  b, null)) virtual;
-- 创建唯一约束
alter table t1 add constraint unique (flag);

测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> insert into t1 (a,b,c) values (5,2,200),(6,3,300);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into t1 (a,b,c) values (4,1,100);
ERROR 1062 (23000): Duplicate entry '1' for key 'flag'
mysql> select * from t1;
+---+------+------+------+
| a | b    | c    | flag |
+---+------+------+------+
| 1 |    1 |   10 |    1 |
| 2 |    2 |   20 | NULL |
| 3 |    3 |   30 | NULL |
| 5 |    2 |  200 | NULL |
| 6 |    3 |  300 | NULL |
+---+------+------+------+
5 rows in set (0.00 sec)

该方法在MySQL 5.7以上版本中通用。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【MySQL】数据库约束
喜欢做梦
2025/04/20
1590
【MySQL】数据库约束
​MySQL引发的监控问题
今天在线上发现一个问题,挺有意思的,这里简单记录下。 问题的背景是查看一个Grafana监控的时候,发现监控没有数据了:
AsiaYe
2021/07/14
9470
​MySQL引发的监控问题
【MySQL】MySQL表的增删改查(进阶篇)——之约束条件
Hello!!!家人们,小编上期期讲解了关于增删查改的基础操作~~~,关于数据库表的增删查改有了一定的认知,小编这期就将深入讲解另一部分内容,即关于数据库增删查改的进阶操作之约束条件,大家准备好了吗~~~🥳🥳🥳;
用户11288949
2024/09/24
1950
【MySQL】MySQL表的增删改查(进阶篇)——之约束条件
【说站】mysql约束条件unique是什么
以上就是mysql约束条件unique的介绍,希望对大家有所帮助。更多mysql学习指路:MySQL
很酷的站长
2022/11/23
1.3K0
【说站】mysql约束条件unique是什么
MySQL和Oracle中唯一性索引的差别(r12笔记第83天)
今天在修复MySQL数据的时候,发现一个看起来“奇怪”的问题。 有一个表里存在一个唯一性索引,这个索引包含3个列,这个唯一性索引的意义就是通过这3个列能够定位到具体1行的数据,但是在实际中却发现这个唯一性索引还是有一个地方可能被大家忽略了。 我们先来看看数据的情况。 CREATE TABLE `test_base_data` ( `servertime` datetime DEFAULT NULL COMMENT '时间', `appkey` varchar(64) DEFAULT N
jeanron100
2018/03/21
1.3K0
2024Mysql And Redis基础与进阶操作系列(3)作者——LJS[含MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法]
数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。
盛透侧视攻城狮
2024/10/22
2370
2024Mysql And Redis基础与进阶操作系列(3)作者——LJS[含MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法]
【MySQL】005.MySQL表的约束(上)
真正约束字段的是数据类型,但数据类型约束很单一,需要一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。
_孙同学
2025/04/23
990
【MySQL】005.MySQL表的约束(上)
Mysql系列 - 第4天:DDL常见操作汇总
DDL:Data Define Language数据定义语言,主要用来对数据库、表进行一些管理操作。
路人甲Java
2019/09/16
9950
MySQL处理重复数据实例分析
MySQL限制数据重复的方式:表上增加主键(Primary Key)或增加唯一性索引(Unique)
星哥玩云
2022/08/17
9480
【MySql】表的约束
真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束的本质是通过技术收到逼迫程序员插入正确的数据,反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。约束的最终目标:保证数据的完整性和可预期性所以需要更多的约束。 表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primarykey,auto_increment,unique key 。
平凡的人1
2023/10/15
3280
【MySql】表的约束
MySQL之表的约束
一 介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性 主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY (FK) 标识该字段为该表的外键 NOT NULL 标识该字段不能为空 UNIQUE KEY (UK) 标识该字段的值是唯一的 AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键) DEFAULT 为该字段设置默认值 UNSIGNED 无符号 Z
人生不如戏
2018/04/10
4.9K0
MySQL表的完整性约束
  为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。
changxin7
2019/09/10
3.6K0
linux 之mysql——约束(constraint)详解
比如name字段中要让其用户名不重复,这就需要添加约束。或者必须注册的时候需要添加邮箱等
用户4877748
2020/07/21
2.5K0
表——完整约束性规则(键)
一 介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性 主要分为: primary key (PK) 标识该字段为该表的主键,可以唯一的标识记录 foreign key (FK) 标识该字段为该表的外键 not null 标识该字段不能为空 unique key (UK) 标识该字段的值是唯一的 auto_increment 标识该字段的值自动增长(整数类型,而且为主键) default 为该字段设置默认值 unsigned 无符号 z
用户1214487
2018/01/23
2.4K0
深入浅出:掌握MySQL表约束与数据完整性设计
真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,auto_increment,unique key 。
用户11286421
2025/03/20
1070
深入浅出:掌握MySQL表约束与数据完整性设计
MySQL 学习笔记(三):完整性和触发器设计
(一)完整性设计 方法一、在设计表时定义约束 删除数据库school,建立新数据库school1 drop database school; create database school; use school; 1.定义约束  create table Student( Sno char(9) primary key, /*主键约束 提示primary key */ Sname char(20) unique, /* 唯一约束 提示 unique */ Ssex cha
希希里之海
2018/07/05
1.5K0
【Mysql】:linux环境下表的三部曲(数据操作 + 类型解析 + 约束规则)
这篇文章只是对以前的内容作个详细补充,想要速成操作的,可以参考这篇博客 【MySQL学习】:关系数据库标准语言SQL
IsLand1314
2025/02/09
740
【Mysql】:linux环境下表的三部曲(数据操作 + 类型解析 + 约束规则)
SQL学习笔记三(补充-3)之MySQL完整性约束
是否可空,null表示空,非字符串 not null - 不可空 null - 可空
Jetpropelledsnake21
2019/02/15
1.5K0
第13章_约束
数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。
程序员Leo
2023/08/07
4680
第13章_约束
MySQL 约束
  非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段,用户在添加数据时没有指定值,数据库系统就会报错。可以通过 CREATE TABLE 或 ALTER TABLE 语句实现非空。在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空。
Demo_Null
2020/09/28
3.1K0
MySQL 约束
推荐阅读
相关推荐
【MySQL】数据库约束
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验