提问人:IleNea 提问时间:11/16/2023 最后编辑:yiviIleNea 更新时间:11/16/2023 访问量:47
唯一约束,取决于字段的值
Unique Constraint depending on value of a field
问:
我需要为我的订阅表创建一个唯一约束,以禁止用户同时拥有两个活动订阅。我创建了迁移并更新了我的实体类:
CREATE UNIQUE INDEX unique_user_id_status ON user_subscription_plan (user_id, status)
但是我刚刚意识到状态字段可以有多个值(活动、非活动、已处理),因此我可能只有在两个状态处于活动状态时才应该有此约束,但例如,我可以有两个已处理的状态。这是正确的吗?那么我如何在实体类上做到这一点呢?任何建议都受到高度赞赏。
答:
1赞
Littlefoot
11/16/2023
#1
使用 MySQL 时,查看基于函数的索引是否有帮助。
create table test (user_id int, status varchar(20));
create unique index ui1_test on test
(user_id, (case when status = 'active' then status end));
它不会让您插入状态为 的两行,但不会阻止您插入任意数量的行,并具有任何其他状态(您提到 和 )。active
inactive
processed
看看小提琴的演示。
评论