MYSQL:为三个字段的组合创建UNIQUE索引,以防止重复

时间:2018-06-19 18:46:29

标签: mysql unique-index

为了在三个字段之间保持一对一的比率,我想在这三个字段上创建一个UNIQUE索引。换句话说,对于一个表Reviews,如果一个字段是reviewid,则我想防止一个给定的reviewid与一个songid关联的情况。给定userid

实际上,我想对reviewidsongidreviewidartistidreviewidalbumid的几种组合进行此操作给定的userid

我现在不能更改数据模式。现在,我正在尝试用PHP代码执行此操作,如果MYSQL通过Indices强制执行唯一性以确保一个人从不漏过会更好。

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

我认为在相关字段上使用UNIQUE索引应该可以实现,但是我无法让MYSQL接受。它说您不能在同一字段上拥有唯一索引和主索引,在这种情况下,必须是reviewid。

有人可以建议如何做吗?

提前感谢您的任何建议

1 个答案:

答案 0 :(得分:1)

在我看来,您只需要在songId,artistid和Albumid上使用单独的唯一键即可。由于reviewId是pk,因此,如果任何Songid出现在多个记录中,则它必然具有不同的reviewId。实际上,两个字段上的索引都将实现与您想要的相反的操作,只要多次使用不同的reviewId,就允许多次出现songId。多个字段上的唯一索引可确保组合是唯一的。

编辑:下面的评论中对此进行了介绍,但是确切的解决方案是,唯一索引必须位于userId上,并且要检查歌曲/艺术​​家/专辑;允许进行多次评论,每个用户只能进行一次。