新菜鸟请问各位大佬 MySQL 能不能字段等于某个值才建立唯一索引

2020-04-02 16:17:22 +08:00
 353943780

例如:

a / b / c 都是字段名

(a = 1) + b + c 是唯一索引

(a != 1) + b + c 可重复

1682 次点击
所在节点    程序员
6 条回复
b821025551b
2020-04-02 16:21:50 +08:00
看不懂,a 都是字段名了,怎么去==1
353943780
2020-04-02 16:23:55 +08:00
@b821025551b 可能是我描述不清楚,如果数据记录中 a 字段值为 1 的时候,与字段 b 、c 联合为唯一
scriptB0y
2020-04-02 16:31:48 +08:00
有一种索引叫做 partial index,可以根据条件建立索引。你这种情况可以

create unique index unique_b_c_if_a_is_one on partial_index(b,c) where a='1';

然后再创建一个索引

create index unique_b_c_if_a_not_one on partial_index(b,c) where a!='1';

就可以满足你的需求。但是据我所知 postgres ( https://www.postgresql.org/docs/9.3/indexes-unique.html ) 和 SQL Server 支持这种索引,mysql 目前应该不支持。

不知道有没有其他方案哈。
lysS
2020-04-02 16:32:33 +08:00
你把那两中情况分成两个表嘛
rrfeng
2020-04-02 16:33:47 +08:00
mongodb 也支持 partial index

拆一下表吧。或者另外加逻辑去重。
MonoLogueChi
2020-04-03 09:09:35 +08:00
不清楚 mysql 有没有这种操作,但是我知道 postgresql 有这样的索引,叫做 Partial Indexes,

CREATE INDEX xxx_index ON table1(col1) WHERE col2 is not true;

mysql 我用的不多,不太清楚有没有这种东西,你可以顺着这个思路查一下

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

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

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

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

© 2021 V2EX