前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL实现条件唯一性

MySQL实现条件唯一性

作者头像
用户1148526
发布2022-05-19 13:33:21
7580
发布2022-05-19 13:33:21
举报
文章被收录于专栏:Hadoop数据仓库Hadoop数据仓库

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

代码语言:javascript
复制
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
复制
-- 创建示例表并添加数据
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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档