代码之家  ›  专栏  ›  技术社区  ›  user6631314

mysql:为三个字段的组合创建唯一索引以防止重复

  •  0
  • user6631314  · 技术社区  · 6 年前

    为了在三个字段之间保持一对一的比率,我想创建一个 UNIQUE 三个字段的索引。换句话说,对于一张桌子, Reviews 如果一个字段是 reviewid ,我希望防止出现多个 雷维德 与给定的 songid 对于给定的 userid .

    事实上,我想为几个组合做这个 雷维德 宋伊德 , 雷维德 artistid 雷维德 albumid 对于给定的 用户标识 .

    此时无法更改数据架构。虽然现在,我正试图在php代码中实现这一点,但如果mysql通过索引强制实现惟一性以确保一个索引永远不会漏掉,那就更好了。

    Reviews
    reviewid (primary key)|text|songid|albumid|artistid|userid
    1|great song|222|null|null|22
    2|great album|null|333|null|22
    3|great singer|null|null|444|22
    
    //I want to exclude the following entry:
    4|lousy song|222|null|null|22
    

    我认为在有问题的字段上使用一个唯一的索引应该是可能的,但是我不能让mysql接受这一点。它说,在同一个字段中,在ReVIEWD上不能有唯一的索引和主索引。

    有人能建议怎么做吗?

    提前谢谢你的建议

    1 回复  |  直到 6 年前
        1
  •  1
  •   Uueerdo    6 年前

    在我看来,你只需要在songid、artistid和albumid上单独的唯一键。因为reviewid是pk,如果有任何歌曲id出现在多个记录上,那么它一定是用不同的reviewid。事实上,两个字段上的索引将完成与您所需相反的任务,只要使用不同的reviewid,就允许多次出现songid;多个字段上的唯一索引确保 结合 是独一无二的。

    编辑:这在下面的评论中有所涉及,但确切的解决方案是,唯一的索引需要放在用户id和正在被评论的歌曲/艺术家/专辑上;允许多个评论,每个用户只允许一次。