如何在 Mysql 中创建一个带条件的唯一索引?

2017-09-20 15:58:14 +08:00
 AnonymousAccout

需求:
一张表里有 4 个字段:a,b,c,d 现在我想要在 d 的值为 1 和 2 的时候联合唯一索引(a,b,c)生效,在 d 为其他值的时候不生效,该怎么实现呢?

我在网上搜了一下,貌似很多数据库都可以实现这个需求,就只有 Mysql 找不到相关的解决方案。万般无奈只能来 v 站上求助了。

4783 次点击
所在节点    MySQL
9 条回复
honam
2017-09-20 16:30:30 +08:00
要是我没猜错,楼主要做的功能是逻辑删除,但是又想用唯一索引。
ipconfiger
2017-09-20 16:34:25 +08:00
MySQL 的索引弱到爆, 你就别想了
AnonymousAccout
2017-09-20 16:39:36 +08:00
@honam 是插入和更新的时候要用到=。=因为比较懒 不想通过业务代码检测唯一性,想通过数据库本身来实现
liprais
2017-09-20 16:42:55 +08:00
不能
jhdxr
2017-09-20 18:55:21 +08:00
索引做不到,但是你可以用触发器。。。
petelin
2017-09-20 20:35:05 +08:00
有一种比较猥琐的方法, 在加多 3 个列, b1, c1, d1, 建索引 (a, b1, c1, d1).... 然后不需要唯一索引的写的时候用随机, 需要的正常写业务数据,,,, (我是把 a 当做条件列了)
wdlth
2017-09-20 21:15:34 +08:00
不清楚你提到的很多数据库可以实现是什么意思?
单纯的 DDL 应该没办法吧,需要用触发器或者存储过程这类可编程的东西。
alcarl
2017-09-20 21:21:29 +08:00
加一列 e 吧 abce 设成唯一索引,插入或者更新时如果 d 为 1 或者 2,e 列就取一个定值比如 aaa,如果不是则取行 id
celltree
2018-04-12 15:31:54 +08:00
@wdlth pg 可以加条件唯一索引

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/392288

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX