V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
353943780
V2EX  ›  程序员

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

  •  
  •   353943780 · 2020-04-02 16:17:22 +08:00 · 1821 次点击
    这是一个创建于 1692 天前的主题,其中的信息可能已经有所发展或是发生改变。

    例如:

    a / b / c 都是字段名

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

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

    6 条回复    2020-04-03 09:09:35 +08:00
    b821025551b
        1
    b821025551b  
       2020-04-02 16:21:50 +08:00
    看不懂,a 都是字段名了,怎么去==1
    353943780
        2
    353943780  
    OP
       2020-04-02 16:23:55 +08:00
    @b821025551b 可能是我描述不清楚,如果数据记录中 a 字段值为 1 的时候,与字段 b 、c 联合为唯一
    scriptB0y
        3
    scriptB0y  
       2020-04-02 16:31:48 +08:00   ❤️ 2
    有一种索引叫做 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
        4
    lysS  
       2020-04-02 16:32:33 +08:00
    你把那两中情况分成两个表嘛
    rrfeng
        5
    rrfeng  
       2020-04-02 16:33:47 +08:00
    mongodb 也支持 partial index

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

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

    mysql 我用的不多,不太清楚有没有这种东西,你可以顺着这个思路查一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3868 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:32 · PVG 18:32 · LAX 02:32 · JFK 05:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.